Python-subprocess-Interaktion, warum mein Prozess arbeiten Popen.kommunizieren, aber nicht Popen.stdout.read()?

Ich versuche, die Kommunikation mit einem command-line-chat-bot mit Python mithilfe der subprocess Modul. (http://howie.sourceforge.net/verwenden Sie die kompilierte win32-binary, ich habe meine Gründe!)

Dies funktioniert:

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

Aber Popen.communicate wartet, bis der Prozess zu kündigen (und es sendet EOF?), Ich möchte in der Lage sein, mit ihm zu interagieren. Die offensichtliche Lösung für dieses war zu Lesen stdout /schreiben stdin etwa so:

Dies nicht funktioniert:

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

(Beachten Sie, dass ich bin eigentlich mit komplexeren code basiert auf http://code.activestate.com/recipes/440554/ aber das Problem ist das gleiche.)

Das problem ist, der zweite Ansatz arbeitet perfekt für die Kommunikation mit cmd, aber wenn ich den chatbot, nichts. Also meine Frage ist, wie unterscheidet sich dies bei der Erfassung von output, um über Popen.kommunizieren()?

d.h. ich kann mit dem zweiten Ansatz, um die Befehlszeile verwenden, wie normal, bis ich den chatbot, an welcher Stelle ich mehr erhalten Ausgabe. Mit dem ersten Ansatz korrekt zeigt die ersten paar Zeilen der Ausgabe von bot, aber lässt mich nicht in der Lage, mit ihm zu interagieren.

InformationsquelleAutor SudoNhim | 2012-03-12
Schreibe einen Kommentar