2008-10-30 182 views
5

我想寫一個包裝我們的軟件的python腳本。該腳本需要構建我們的產品,並將其打包。目前我們有其他腳本,每個腳本單獨執行,其中包括csh和perl腳本。一個這樣的腳本運行如下:是否可以通過subprocess.Popen與子子進程進行通信?

sudo mod args 

其中mod是perl腳本;所以在蟒蛇我會做

proc = Popen(['sudo', 'mod', '-p', '-c', 'noresource', '-u', 'dtt', '-Q'], stderr=PIPE, stdout=PIPE, stdin=PIPE) 

問題是,這個MOD腳本需要回答幾個問題。爲此,我認爲傳統的

(stdout, stderr) = proc.communicate(input='y') 

會工作。我認爲它不工作,因爲Popen控制的過程是sudo,而不是提出問題的mod腳本。有沒有辦法與mod腳本進行交流,並仍然通過sudo運行它?

回答

4

我會選擇Pexpect。

import pexpect 
child = pexpect.spawn ('sudo mod -p -c noresource -u dtt -Q') 
child.expect ('First question:') 
child.sendline ('Y') 
child.expect ('Second question:') 
child.sendline ('Yup') 
+0

我嘗試了pexpect,它的工作原理是「預期的」。謝謝! – darrickc 2008-10-31 19:04:48

1

最簡單的事情就是通過sudo運行控制腳本(Python腳本)。你有能力做到這一點,還是不是一種選擇?

3

我想你應該在你的Popen呼叫刪除sudo和要求腳本的用戶鍵入sudo

此外,您還可以在腳本中更明確地需要提升特權,而不是將其隱藏在Popen之內。

0

我們需要更多信息。

  1. sudo是否要求您輸入密碼?
  2. mod腳本有什麼樣的界面來提問?

因爲這些東西在管道上不能正常處理。

這兩個解決方案都可能是Pexpect,它在處理要求密碼的有趣腳本以及各種其他輸入問題方面相當專業。

相關問題