Python更改目录和所有子目录

时间:2018-05-26 02:28:56

标签: python permissions

我正在尝试在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脚本?

由于

1 个答案:

答案 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脚本中使用它们。它可以为您节省大量的故障排除时间。