2016-02-03 104 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())?