一尘不染

从python脚本以超级用户身份运行命令

python

因此,我试图使用子进程从python脚本中以超级用户身份运行一个进程。在ipython shell中,类似

proc = subprocess.Popen('sudo apach2ctl restart',
                        shell=True, stdin=subprocess.PIPE,
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE)

工作正常,但是一旦将其粘贴到脚本中,我就会开始获得:sudo: apach2ctl: command not found

我猜这是由于sudo处理ubuntu上的环境的方式。(我也尝试sudo -E apche2ctl restartsudo env path=$PATH apache2ctl restart与无济于事)

所以我的问题基本上是,如果我想以apache2ctl restart超级用户身份运行,并在需要时提示用户输入超级用户密码,我该怎么做?我无意在脚本中存储密码。

编辑:

我尝试将命令既作为字符串又作为令牌传递给列表。在python解释器中,使用字符串我会正确获得密码提示(仍然像在我的原始问题中那样在python脚本中仍然不起作用),列表仅提供sudo的帮助屏幕。

编辑2:

所以我收集到的是,虽然shell = True时Popen可以像字符串一样使用某些命令,但它需要

proc = subprocess.Popen(['sudo','/usr/sbin/apache2ctl','restart'])

没有’shell = True’来使sudo工作。

谢谢!


阅读 163

收藏
2020-12-20

共1个答案

一尘不染

尝试提供apache2ctl的完整路径。

2020-12-20