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
subprocess: NAch jeder Zeile Antwort kriegen klappt nicht
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Andere Frage: Warum machst du einen neuen Thread auf, wenn doch hier http://www.python-forum.de/viewtopic.php?t=4935 was recht ähnliches Diskutiert wird?
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Henning!henning hat geschrieben:(Das äußert sich so, dass ein readline() auf den stdout einfach hängen bleibt)
Ich glaube nicht, dass es so funktioniert, da stdin blockiert, bis die Eingabe abgeschlossen ist, aber modelnine hat sich daran mal versucht:
http://www.python-forum.de/viewtopic.php?p=29414#29414
Vielleicht kannst du damit etwas anfangen.
lg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.