2012-03-04 4 views
3

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

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

например,

 
Enter your name: 
enter 

Enter your email: 
enter 

... 

Are you sure these details are correct? 
yenter 

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

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

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

ответ

4

попробовать что-то вроде этого (я не проверял):

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 
+0

+1 за pexpect, которую я не знаю. Это очень полезный подход - я постараюсь заставить его работать. –

+2

'pexpect.run ('yourprogram', events = {r ': $': '\ n', r '\? $': 'Y \ n'})' – jfs

+0

Это просто радость! –

Смежные вопросы