有沒有一種方法可以輕鬆地將答案傳遞給python中的可執行文件?將答案傳遞給popen.subprocess
我有一個shell安裝腳本(第三方),它在安裝前要求一些參數。我想從我的Python腳本中提供該參數。
有可能嗎? 像 subprocess.popen(的MyScript,[ 「ANSWER1」, 「ANSWER2」])
有沒有一種方法可以輕鬆地將答案傳遞給python中的可執行文件?將答案傳遞給popen.subprocess
我有一個shell安裝腳本(第三方),它在安裝前要求一些參數。我想從我的Python腳本中提供該參數。
有可能嗎? 像 subprocess.popen(的MyScript,[ 「ANSWER1」, 「ANSWER2」])
有但這正是一個很好的Python模塊,叫pexpect
下面是用它來交互運行SCP的例子(從Pexpect的文檔):
child = pexpect.spawn('scp foo [email protected]:.')
child.expect ('Password:') # wait for 'Password:' to show up
child.sendline (mypassword)
是什麼可能?像
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())?
感謝羅布,似乎能夠確實做到我需要的東西,但它看起來非常巨大(並且能夠根據需要做得更多),我有點失落...... 您能否給我是一個樣本,我可以如何將一個2個答案的序列發送給腳本? – OpenStove
我編輯了我的答案以包含一個示例。 –
太棒了!有沒有辦法只能解決下一個問題? 在我的情況下,問題很長,我擔心如果問題發生變化,它將不再起作用......但是,也許我只能期待問題的結束? – OpenStove