Par*_*ker 4 python io privileges sudo hosts-file
我有一个我正在研究的Python应用程序需要访问hosts文件以附加几行.一切都在我的测试文件上工作,但是当我告诉程序实际修改/ etc/hosts中的hosts文件时,我得到了IOError 13.根据我的理解,我的应用程序没有root权限.
我的问题是,我该如何绕过这个问题呢?有没有办法提示用户输入密码?如果我在Windows机器上运行该应用程序,该过程会有所不同吗?
这是有问题的代码:
f = open("/etc/hosts", "a")
f.write("Hello Hosts File!")
Run Code Online (Sandbox Code Playgroud)
另外,我计划使用py2app和py2exe作为最终产品.他们会为我处理root权限问题吗?
如果您在sudoers列表中,则可以使用以下命令启动您的程序sudo:
sudo python append_to_host.py
Run Code Online (Sandbox Code Playgroud)
sudo以root权限运行你的python解释器.第一次这样做时,系统会要求您输入密码,以后的电话不会询问您上一次sudo电话是否很久以前.
在sudoers列表(在大多数情况下/etc/sudoers)说管理员信任你.如果您打电话sudo,则不会要求您提供root密码,而是您的密码.您必须证明正确的用户坐在终端上.
更多sudo关于http://en.wikipedia.org/wiki/Sudo
如果要远程控制,可以使用-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')
Run Code Online (Sandbox Code Playgroud)
当您的Python程序运行sudo时,sudo程序将提示用户输入他/她的密码.如果您希望这是基于GUI的,您可以运行GUI sudo,例如"gksu".
在Windows上,hosts文件被隐藏在\ Windows下的几个子目录中.您可以使用相同的一般技巧,但Windows没有sudo命令.这是对等价的讨论:
https://superuser.com/questions/42537/is-there-any-sudo-command-for-windows
| 归档时间: |
|
| 查看次数: |
9101 次 |
| 最近记录: |