Python子进程调用sudo无密码

时间:2018-10-05 13:35:09

标签: subprocess python-3.5 sudo

我目前正在远程环境中工作,该环境的用户具有某些sudo权限,不需要输入任何密码。

具体来说,到目前为止,它可以执行一些nginx命令而不需要密码。当我有一个负责检查更新的python脚本以及是否有更改尝试重新加载nginx时,就会遇到我遇到的问题。如下所示

Popen(['sudo', 'nginx', '-T'], stdin=PIPE, stdout=PIPE, stderr=PIPE) 
call(["sudo", "systemctl", "reload", "nginx.service"])

当脚本到达此步骤之一时,会在终端上弹出提示您输入密码的提示,这是不必要的,因为运行脚本的用户有权运行命令而无需输入密码。

问题:也许有一种方法,不用对变量中的密码进行硬编码,就能告诉脚本在我运行时“继承”用户的权限吗?

一些其他信息:

  • 如果脚本本身是使用sudo调用的,那么一切正常,但是遗憾的是这不是一个选择,并且sudo应该仅用于完全需要它的特定部分(nginx重新加载)
  • Python版本为3.5

编辑:感谢一位朋友解决了这个问题:

解决方案是将'shell = True'参数添加到Popen。

Popen('sudo nginx -T'], shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)

1 个答案:

答案 0 :(得分:0)

问题可能是在脚本执行过程中使用的sudoers nginx-path和PATH变量不匹配。

尝试使Popen调用与sudoers文件中给出的完整PATH相匹配,或者在调用Python脚本的shell中调整PATH。