将答案传递给popen.subprocess

时间:2016-02-03 09:52:35

标签: python python-2.7 shell subprocess popen

有没有办法轻松地将答案传递给python中的可执行文件?

我有一个shell安装脚本(第三方),它在安装之前要求一些参数。我想从我的python脚本中提供该参数。

有可能吗? 喜欢     subprocess.popen(的MyScript,[" ANSWER1"" ANSWER2"])

2 个答案:

答案 0 :(得分:1)

有一个很好的Python模块可以做到这一点,称为pexpect

以下是使用它以交互方式运行scp的示例(来自pexpect docs):

child = pexpect.spawn('scp foo myname@host.example.com:.')
child.expect ('Password:') # wait for 'Password:' to show up
child.sendline (mypassword)

答案 1 :(得分: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())?