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