我正在尝试在Python中执行以下命令:
shutil.rmtree('/var/www')
但是这给了我以下错误:
PermissionError: [Errno 13] Permission denied: '/var/www'
我尝试在该命令之前执行此命令以更改目录
的权限subprocess.call(['sudo', 'chmod', '-R', '777', '/var/www'])
我猜这是有效的,因为它要求我输入我的sudo密码并且不会抛出错误,但是当我达到rmtree命令时它仍会抛出一个
Permission denied: '/var/www'
我做错了什么?此外,我需要在没有在执行期间询问我的sudo密码的情况下工作。有没有办法将我的密码放入Python脚本?
由于
答案 0 :(得分:0)
您需要检查该目录的组所有权,确保将username
添加到该组,该组对路径中的所有文件具有写权限:
chmod -R g+w /var/www/
至于问题的第二部分,sudo
可以使用-S
标志从标准输入中读取密码,该标志可以包含在脚本中。这是一个例子:
$ echo "password" | sudo -S <command>
快速浏览man sudo
页面:
-S, - stdin
将提示写入标准错误并从中读取密码 标准输入而不是使用终端设备。密码必须 后面跟一个换行符。
另一种方法(需要将其添加到您的脚本中):
sudo -S <<< "password" command
另一种方法是通过使用sudoers
命令编辑visudo
文件来禁用密码提示,并添加以下行:
username ALL=(ALL) NOPASSWD: ALL
上述行允许username
在任何用户下运行所有命令(最后ALL
)而不提示输入密码。
安全且更受限制的方法是使用:
username ALL=(ALL) NOPASSWD: /usr/bin/python myscript.py
这一次,我们限制了username
这种执行类型,但是对于一个命令/usr/bin/python myscript.py
。
我还希望仔细检查权限并直接从shell测试这些命令,然后再在python脚本中使用它们。它可以为您节省大量的故障排除时间。