Python子进程:与shell脚本交互

4
我有一个shell脚本,需要用户回答太多的问题。
我想对以:结尾的每个问题都回答enter,并对以?结尾的每个问题都回答yenter
例如,
输入你的名字:
enter

输入你的电子邮件地址:
enter

...
确定这些细节是否正确吗? yenter
我已经使用以下命令开启了该进程:
subprocess.Popen(shell=True, stdout=sp.PIPE, stderr=sp.STDOUT, stdin=sp.PIPE)

我该如何轮询脚本输出并等待问题出现?

1个回答

5

尝试像这样做(我没有测试过):

import pexpect

child = pexpect.spawn('yourprogram')
while True:
  found = child.expect ([r':$', r'\?$', pexpect.EOF])
  if found == 0:
    child.send('\n')
  elif found == 1:
    child.send('y\n')
  else:  # EOF
     return

+1 对于我不知道的 pexpect,它似乎是一种非常有用的方法 - 我会尝试让它工作。 - Adam Matan
2
pexpect.run('yourprogram', events={r':$': '\n', r'\?$': 'y\n'}) - jfs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接