Взаимодействие с подпроцессами Python, почему мой процесс работает с Popen.communicate, но не с Popen.stdout.read ()?

Я пытаюсь связаться с ботом чата командной строки с Python, используяsubprocess модуль. (http://howie.sourceforge.net/ с использованием скомпилированного двоичного файла win32, у меня есть свои причины!)

Это работает:

proc = Popen('Howie/howie.exe', stdout=PIPE,stderr=STDOUT,stdin=PIPE)
output = proc.communicate()

НоPopen.communicate ждет завершения процесса (и отправляет его EOF?), я хочу иметь возможность взаимодействовать с ним. Очевидное решение для этого было прочитатьstdout / записыватьstdin вот так:

Это не работает:

proc = Popen('Howie/howie.exe', stdout=PIPE,stderr=STDOUT,stdin=PIPE)
while True: print proc.stdout.readline()

(Обратите внимание, что я на самом деле использую более сложный код, основанный наhttp://code.activestate.com/recipes/440554/ но вопрос тот же.)

Проблема в том, что второй подход отлично работает для связи с cmd, но когда я запускаю чат-бота, ничего не происходит. Итак, мой вопрос,Как это отличается в захвате вывода с использованием Popen.communicate ()?

то есть я могу использовать второй подход, чтобы использовать командную строку как обычно, пока я не запустил чат-бота, и в этот момент я прекращаю получать выходные данные. При первом подходе правильно отображаются первые несколько строк вывода бота, но я не могу с ним взаимодействовать.

Ответы на вопрос(2)

Ваш ответ на вопрос