所以我试图让一个进程作为超级用户从一个使用子进程的python脚本中运行。在IPython的壳像从一个python脚本作为超级用户运行一个命令
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将一些命令,就像串工作时,壳=真,它需要
proc = subprocess.Popen(['sudo','/usr/sbin/apache2ctl','restart'])
没有“壳=真”,以获得须藤上班。
谢谢!
这可能是一个安全风险如何配置sudo,以便该用户可以运行这个命令而不需要密码? – 2009-02-19 23:13:19
您可能想使用[`proc.wait()`](https://docs.python.org/2/library/subprocess.html#subprocess.Popen.wait),具体取决于您在做什么; “等待”不会继续,直到子进程结束运行。 – craymichael 2016-11-08 19:58:34