2009-11-06 2 views
0

Этот вопрос очень похож на this one. Я хочу читать вывод из консольного приложения. Приложение не завершается, и он не принимает ввода от stdin.Отладка чтения вывода консольного приложения Windows с использованием Python

Когда я изменяю решение rix0rrr для выполнения своего приложения, а затем запускаю его решение, Python зависает, потому что read (1) не возвращается. Первоначальным выходом приложения является «Запуск сервера. \ N». Можете ли вы догадаться, какое свойство может иметь мое приложение, которое мешает его решению работать? Степень моих изменений в том, что я изменил это:

p = Popen(["cmd.exe"], stdin=PIPE, stdout=PIPE) 
prompt = re.compile(r"^C:\\.*>", re.M) 

к этому:

p = Popen(["c:\\path\\to\\my\\app\\app.exe"], stdin=PIPE, stdout=PIPE) 
prompt = re.compile(r"Starting", re.M) 
import pdb;pdb.set_trace() 

Я также создал тестовую версию своего приложения, которое возвращает немедленно и проверить, что выход из приложения возвращается путем чтения() в этом случае. Его оригинальный, немодифицированный пример, как и ожидалось, также не виснет.

Я также опробовал код ActiveState, с которым связан Петр в своем ответе. В этом случае в процессе не возвращается результат.

Это Python 2.4.4 на Vista.

+0

Вам нужно показать больше кода, в том числе о том, как вы читаете процесс 'STDOUT –

ответ

1

Самое первое, что я хотел бы проверить, это буферизация в app.exe. Если «Запуск сервера. \ N» буферизуется и не попадает в трубку, вы ничего не можете сделать со стороны читателя.

Итак, попробуйте добавить fflush(stdout) после printf("Starting the server.\n").

+0

Вот и все! .. – Brian

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