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