我有要求输入“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
答案 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。