subprocess: NAch jeder Zeile Antwort kriegen klappt nicht
Verfasst: Freitag 20. Januar 2006, 07:56
Moin.
Folgendes: Ich möchte via subprocess(stdin=PIPE, stdout=PIPE) mit einem anderen Programm kommunizieren. Ich weiß, dass dieses Programm auf jede Zeile input mindestens eine Zeile output gibt.
Die scheint aber nicht immer anzukommen, ach flushen bringt da nichts. (Das äußert sich so, dass ein readline() auf den stdout einfach hängen bleibt)
communicate() oder schließen von stdin sind keine Option, da ich später noch weitere Zeilen hinschicken will.
Hab mal zum Test ein kleines python-script geschrieben mit dem ich dann festgestellt, dass die input-Zeile sehr wohl ankommt, aber das output des Programms wohl nicht (hab das script zusätzlich in ne logdatei schreiben lassen).
Nun 2 Fragen:
1. Wie kann ich das reparieren, so dass ich zumindest die erste Zeile (die ja auf jeden Fall da ist) wenigstens lesen kann?
2. Kann ich irgendwie nicht-blockierend von stdout lesen? Ich weiß ja nicht, wie viele Zeilen jeweils als Antwort kommen, muss die Antwort aber unbedingt vor der nächsten "Frage" verarbeiten.
(auf der anderen Seite kann ich leider nichts an diesem undefinierten Verhalten ändern, das haben andere verbrochen)
TIA
Henning
Folgendes: Ich möchte via subprocess(stdin=PIPE, stdout=PIPE) mit einem anderen Programm kommunizieren. Ich weiß, dass dieses Programm auf jede Zeile input mindestens eine Zeile output gibt.
Die scheint aber nicht immer anzukommen, ach flushen bringt da nichts. (Das äußert sich so, dass ein readline() auf den stdout einfach hängen bleibt)
communicate() oder schließen von stdin sind keine Option, da ich später noch weitere Zeilen hinschicken will.
Hab mal zum Test ein kleines python-script geschrieben mit dem ich dann festgestellt, dass die input-Zeile sehr wohl ankommt, aber das output des Programms wohl nicht (hab das script zusätzlich in ne logdatei schreiben lassen).
Nun 2 Fragen:
1. Wie kann ich das reparieren, so dass ich zumindest die erste Zeile (die ja auf jeden Fall da ist) wenigstens lesen kann?
2. Kann ich irgendwie nicht-blockierend von stdout lesen? Ich weiß ja nicht, wie viele Zeilen jeweils als Antwort kommen, muss die Antwort aber unbedingt vor der nächsten "Frage" verarbeiten.
(auf der anderen Seite kann ich leider nichts an diesem undefinierten Verhalten ändern, das haben andere verbrochen)
TIA
Henning