Подпроцесс Python: взаимодействие со скриптом оболочки - PullRequest
3 голосов
/ 04 марта 2012

У меня есть сценарий оболочки, который задает пользователю слишком много вопросов.

Я хочу ответить на каждый вопрос, который заканчивается на : с помощью , введите , и на каждый вопрос, который заканчивается на ? с помощью y, введите .

например.,

Enter your name:
<kbd>enter</kbd>

Enter your email:
<kbd>enter</kbd>

...

Are you sure these details are correct?
<kbd>y</kbd><kbd>enter</kbd>

Я начал подпроцесс с:

subprocess.Popen(shell=True, stdout=sp.PIPE, stderr=sp.STDOUT, stdin=sp.PIPE)

Как мне опросить вывод сценария, ожидая появления вопроса?

1 Ответ

4 голосов
/ 04 марта 2012

Попробуйте что-то вроде этого (я не проверял):

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
...