Python Subprocess传递是/否

时间:2018-03-28 05:14:57

标签: python python-2.7

我有要求输入“YES”的命令。如何自动传递此答案?

我使用了以下代码,但它无效。

from subprocess import Popen, PIPE
foo_proc = Popen([cmd], stdin=PIPE, stdout=PIPE)
yes_proc = Popen(['YES'], stdout=foo_proc.stdin)
foo_output = foo_proc.communicate()[0]
yes_proc.wait()

我收到错误:

echo: write error: Broken pipe

PS:我正在使用python2.7

2 个答案:

答案 0 :(得分:2)

我建议直接在Popen语句中使用简单的管道命令。您可以使用以下 -

foo_proc = Popen(['echo' , 'yes', '|', cmd])

您需要使用shell=True,例如

foo_proc = subprocess.Popen(['echo yes | conda install pyqtgraph'], shell=True)

有关详细信息,请参阅(this link)

答案 1 :(得分:0)

对于CLI交互,我将使用Python模块来控制伪终端中的交互式程序,如Pexpect

它允许您执行类似且更复杂的任务:

# This connects to the openbsd ftp site and
# downloads the recursive directory listing.
import pexpect
child = pexpect.spawn('ftp ftp.openbsd.org')
child.expect('Name .*: ')
child.sendline('anonymous')
child.expect('Password:')
child.sendline('noah@example.com')
child.expect('ftp> ')
child.sendline('lcd /tmp')
child.expect('ftp> ')
child.sendline('cd pub/OpenBSD')
child.expect('ftp> ')
child.sendline('get README')
child.expect('ftp> ')
child.sendline('bye')

您可以找到其文档here