Wie kann ich Lesen alle zur Verfügung stehen Daten aus Teilprozess.Popen.stdout (non-blocking)?

Ich brauche einen Weg, entweder Lesen Sie alle derzeit verfügbaren Zeichen im Datenstrom erstellt von Popen oder um herauszufinden, wie viele Zeichen noch in den Puffer.

Werdegang:
Ich möchte die remote-Steuerung einer interaktiven Anwendung in Python. So weit ich verwendet Popen zum erstellen eines neuen unterprozesses:

process=subprocess.Popen(["python"],shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE, cwd=workingDir)

(Ich bin nicht wirklich ab von python, aber der eigentliche interaktive Schnittstelle ist ähnlich.)
Im moment lese ich 1 byte, bis ich erkennen, dass der Prozess erreicht hat, in der Eingabeaufforderung:

output = ""
while output[-6:]!="SCIP> ":
    output += process.stdout.read(1)
    sys.stdout.write(output[-1])
return output

Dann beginne ich einen längeren Berechnung über process.stdin.write("command\n").
Mein problem ist, dass ich nicht prüfen, ob die Berechnung fertig ist oder nicht, denn ich kann nicht überprüfen, ob das Letzte Zeichen in den stream der Eingabeaufforderung oder nicht. read() oder read(n) blockiert mein thread bis zum erreichen von EOF, die es nie werden, weil das interaktive Programm wird nicht enden, bis es gesagt wird. Suchen Sie die Aufforderung in der Weise der obigen Schleife wird nicht funktionieren, weil sich die Eingabeaufforderung wird nur auftreten, nachdem der Berechnung.

Ideale Lösung, die es mir erlauben würde, die zum Lesen aller verfügbaren Zeichen aus dem stream und sofort eine leere Zeichenfolge zurück, wenn es nichts zu Lesen.

InformationsquelleAutor der Frage Perseids | 2010-06-19

Schreibe einen Kommentar