2016-02-03 78 views
1

有沒有一種方法可以輕鬆地將答案傳遞給python中的可執行文件?將答案傳遞給popen.subprocess

我有一個shell安裝腳本(第三方),它在安裝前要求一些參數。我想從我的Python腳本中提供該參數。

有可能嗎? 像 subprocess.popen(的MyScript,[ 「ANSWER1」, 「ANSWER2」])

回答

1

有但這正是一個很好的Python模塊,叫pexpect

下面是用它來交互運行SCP的例子(從Pexpect的文檔):

child = pexpect.spawn('scp foo [email protected]:.') 
child.expect ('Password:') # wait for 'Password:' to show up 
child.sendline (mypassword) 
+0

感謝羅布,似乎能夠確實做到我需要的東西,但它看起來非常巨大(並且能夠根據需要做得更多),我有點失落...... 您能否給我是一個樣本,我可以如何將一個2個答案的序列發送給腳本? – OpenStove

+0

我編輯了我的答案以包含一個示例。 –

+0

太棒了!有沒有辦法只能解決下一個問題? 在我的情況下,問題很長,我擔心如果問題發生變化,它將不再起作用......但是,也許我只能期待問題的結束? – OpenStove

1

是什麼可能?像subprocess.popen(myscript,["answer1","answer2"])

是的。如果你知道所有的答案,那麼你可以使用Popen.communicate()傳遞答案:

#!/usr/bin/env python 
from subprocess import Popen, PIPE 

process = Popen(myscript, stdin=PIPE, universal_newlines=True) 
process.communicate("\n".join(["answer1", "answer2"])) 

它可能會失敗,在某些情況下,你可以使用pexpect模塊(如@Robin Davis suggested),要解決可能塊緩衝的問題或問題時,輸入/輸出不在標準流中。請參閱Q: Why not just use a pipe (popen())?