subprocess: NAch jeder Zeile Antwort kriegen klappt nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

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
Benutzeravatar
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?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Weil die Frage doch ne andere ist und ich zu spät gesehen habe, dass der andere Thread auch auf dieses Thema hinausläuft, sorry!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

henning hat geschrieben:(Das äußert sich so, dass ein readline() auf den stdout einfach hängen bleibt)
Hi Henning!

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.
Antworten