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

15 浏览
0 Comments

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

我正在尝试在Python脚本中使用subprocess将一个进程作为超级用户运行。在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:

所以我得出的结论是,虽然Popen在shell=True时可以使用一些命令作为字符串,但使用proc = subprocess.Popen(['sudo','/usr/sbin/apache2ctl','restart'])而不带有'shell=True'才能让sudo正常工作。

谢谢!

0