所以我試圖讓一個進程作爲超級用戶從一個使用子進程的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