我正在开发一个 Python 应用程序,需要访问主机文件以添加几行。一切都在我的测试文件上运行,但是当我告诉程序实际修改 /etc/hosts 中的主机文件时,我收到 IOError 13。据我了解,我的应用程序没有 root 权限。
我的问题是,我该如何解决这个问题?有没有办法提示用户输入密码?如果我在 Windows 计算机上运行该应用程序,该过程会有什么不同吗?
这是有问题的代码:
f = open("/etc/hosts", "a")
f.write("Hello Hosts File!")
另外,我计划在最终产品中使用 py2app 和 py2exe。他们会帮我处理 root 权限问题吗?
处理此问题的最简单方法是将更改写入临时文件,然后运行程序来覆盖受保护的文件。就像这样:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)