所以我试图读取一个需要"sudo'd"进入的配置文件,但我试图仅使用python读取其内容而不使用终端。当我使用下面的代码时,我得到如下所示的错误:
with open('/etc/motion/motion.conf','rb') as file:
data = file.readlines()
IOError: [Errno 13] Permission denied: '/etc/motion/motion.conf'
我可以尝试用python严格读取文件的内容吗?
您应该从shell脚本调用您的python文件,将该脚本的所有者更改为root,然后设置该脚本的SUID位。用户将能够运行脚本,但脚本的所有者将是root:
- http://www.codecoffee.com/tipsforlinux/articles/028.html
- http://www.linuxnix.com/2011/12/suid-set-suid-linuxunix.html
- 等。
当然,您必须意识到这样做可能涉及的安全问题,但对于本地使用一个简单的脚本做一件事,这是OK的。
Permission denied
表示您没有权限读取该文件。
如果您在Linux上,您应该使用chmod
命令更改文件的权限。或者你可以使用sudo
命令像这样运行python:
sudo python filename.py
或以root身份登录,然后运行python:
su - root
python filename.py
如果您希望每次都以root身份运行程序,您可以使用os.execlpe()
函数,如下所示:
import os
import sys
euid = os.geteuid()
if euid != 0:
args = ['sudo', sys.executable] + sys.argv + [os.environ]
os.execlpe('sudo',*args)
with open('/etc/motion/motion.conf','rb') as file:
data = file.readlines()
print data
这个解决方案来自这里:
python脚本中的身份验证以root身份运行
@samplebias