Отладка показания вывода приложения консоли Windows с помощью Python

StackOverflow https://stackoverflow.com/questions/1684995

  •  18-09-2019
  •  | 
  •  

Вопрос

Этот вопрос очень похож на Вот этот. Анкет Я хочу прочитать выход из моего приложения консоли. Приложение не заканчивается, и при этом оно не получает вклад от 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").

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top