2012-05-22 2 views
3

Я вызываю внешнюю программу в скрипте Python, используя подпроцесс. Внешняя программа производит много выходных данных. Мне нужно записать результаты этой программы. Текущий код-то вроде этого:Захват вывода через подпроцесс без использования связи

process = subprocess.Popen('cmd.exe', shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=None) 
process.stdin.write('gams "indus89.gms"\r\n') 
while process.poll() != None: 
    line = process.stdout.readline() 
    print line 

ошибки я получаю с этим кодом

процесс пытался писать к несуществующему трубе.

Если я использую следующий код:

process = subprocess.Popen('cmd.exe', shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=None) 
process.stdin.write('gams "indus89.gms"\r\n') 
o, e = process.communicate() 
print o 

, то выход из программы не захваченный.

Как мне изменить свой код, чтобы я мог записывать выходные данные сторонней программы во время ее запуска?

+2

Почему вы используете 'cmd.exe' и' shell = False', почему бы не '' gams "indus89.gms" ''с' shell = True'? –

ответ

3

Popen is overkill.

Try:

output = subprocess.check_output('gams "indus89.gms"\r\n', shell=True) 

Надеется, что будет работать в вашей среде.

+0

Я пробовал это, но все же я не мог захватить вывод, который мне нужно захватить. –

+0

@AdityaGore - это что-то, возвращаемое командой? – jtmoulia

+0

Извините, я запускал старый код. Сейчас все работает нормально. Спасибо за вашу помощь.. –