Отладка показания вывода приложения консоли Windows с помощью Python
Вопрос
Этот вопрос очень похож на Вот этот. Анкет Я хочу прочитать выход из моего приложения консоли. Приложение не заканчивается, и при этом оно не получает вклад от Stdin.
Когда я изменяю решение Rix0rrr для выполнения моего приложения, а затем запускаю его решение, Python висит, потому что чтение (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()
Я также создал тестовую версию моего приложения, которая немедленно возвращается и подтвердил, что вывод из приложения возвращается read () в этом случае. Его оригинальный, немодифицированный пример, как и ожидалось, также не висит.
Я также попробовал код Activestate, с которым Piotr связал в своем ответе. В этом случае не возвращается вывод из процесса.
Это Python 2.4.4 на Vista.
Решение
Самое первое, что я проверил бы, это буферизация в app.exe. Если «Запуск сервера. N» буферизируется и не попадает в трубу, вы ничего не можете сделать со стороны читателя.
Итак, попробуйте добавить fflush(stdout)
после printf("Starting the server.\n")
.