因此,我试图使用子进程从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: apach2ctl: command not found
我猜这是由于sudo处理ubuntu上的环境的方式。(我也尝试sudo -E apche2ctl restart和sudo env path=$PATH apache2ctl restart与无济于事)
sudo -E apche2ctl restart
sudo env path=$PATH apache2ctl restart
所以我的问题基本上是,如果我想以apache2ctl restart超级用户身份运行,并在需要时提示用户输入超级用户密码,我该怎么做?我无意在脚本中存储密码。
apache2ctl restart
编辑:
我尝试将命令既作为字符串又作为令牌传递给列表。在python解释器中,使用字符串我会正确获得密码提示(仍然像在我的原始问题中那样在python脚本中仍然不起作用),列表仅提供sudo的帮助屏幕。
编辑2:
所以我收集到的是,虽然shell = True时Popen可以像字符串一样使用某些命令,但它需要
proc = subprocess.Popen(['sudo','/usr/sbin/apache2ctl','restart'])
没有’shell = True’来使sudo工作。
谢谢!
尝试提供apache2ctl的完整路径。