Взаимодействие с подпроцессами 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 ()?
то есть я могу использовать второй подход, чтобы использовать командную строку как обычно, пока я не запустил чат-бота, и в этот момент я прекращаю получать выходные данные. При первом подходе правильно отображаются первые несколько строк вывода бота, но я не могу с ним взаимодействовать.