IOError:13,通过Python写入/etc/hosts时,“权限被拒绝”

2024-04-27 05:03:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个Python应用程序,需要访问hosts文件来添加几行代码。一切都在我的测试文件上运行,但是当我告诉程序在/etc/hosts中修改我的hosts文件时,我得到了IOError 13。据我所知,我的应用程序没有根权限。

我的问题是,我如何绕过这个问题?有没有办法提示用户输入密码?如果我在Windows机器上运行应用程序,进程会有什么不同吗?

下面是有问题的代码:

f = open("/etc/hosts", "a")
f.write("Hello Hosts File!")

另外,我计划在最终产品中使用py2app和py2exe。他们能帮我处理根权限问题吗?


Tags: 文件代码用户程序机器应用程序权限密码
2条回答

如果您在sudoers列表中,您可以使用sudo启动progamm:

 sudo python append_to_host.py

sudo以root权限运行python解释器。 第一次这样做时,会要求您输入您的密码,稍后的电话不会询问您的最后一个sudo电话是不是不久前。

在sudoers列表中(在大多数情况下,/etc/sudoers)表示管理员信任您。如果你打电话给sudo,你不会被要求输入root密码,而是你的密码。你必须证明正确的用户坐在终端。

关于http://en.wikipedia.org/wiki/Sudosudo的详细信息

如果要远程控制,可以使用-S命令行开关或使用http://www.noah.org/wiki/pexpect

处理此问题的最简单方法是将更改写入临时文件,然后运行程序覆盖受保护的文件。就像这样:

with open('/etc/hosts', 'rt') as f:
    s = f.read() + '\n' + '127.0.0.1\t\t\thome_sweet_home\n'
    with open('/tmp/etc_hosts.tmp', 'wt') as outf:
        outf.write(s)

os.system('sudo mv /tmp/etc_hosts.tmp /etc/hosts')

当Python程序运行sudo时,sudo程序将提示用户输入密码。如果你想让它基于GUI,你可以运行一个GUI sudo,比如“gksu”。

在Windows上,hosts文件隐藏在\Windows下的几个子目录中。您可以使用相同的常规技巧,但Windows没有sudo命令。下面是对等价物的讨论:

https://superuser.com/questions/42537/is-there-any-sudo-command-for-windows

相关问题 更多 >