从Python脚本中以超级用户身份运行命令
从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 restart
和sudo 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正常工作。
谢谢!