Was tun, wenn das CLI-Tool nicht "returnt"?

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
Bennhardt
User
Beiträge: 15
Registriert: Donnerstag 9. Februar 2006, 14:21
Wohnort: Buchholz in der Nordheide

Hi,

ich hoffe, es kann mir einer helfen.
Ich habe folgendes Problem. Ich baue ein kleines GUI mit Tkinter für ein Commandline-Toole (ja ich weiß, es gibt ein extra Forum dafür, aber hier gehts um das grundlegende Problem).
Ich rufe das Tool + Parameter über "subprocess.Popen" auf. Das funktioniert super und klasse und so weiter, aber eben NUR, solange das Tool keinen Fehler wirft. Es gibt ein Szenario, wo das Tool einfach nicht returnt. Ich muss also auf der Kommandozeile ein "ENTER" drücken, damit es weiter geht.
Den Prozess per Timeout zu killen, ist auch nicht so prickelnd, weil das Tool ansich schon mal eine Weile brauchen kann, um "normale" Anfragen auszuführen. Ein Kill würde mir dadurch einen fehlerfreien Durchlauf versauen.

Mein Problem zusammengefasst:
- Das CLI-Tool returnt nicht immer (liefert also weder STDOUT noch STDERR usw.)
- Wenn das passiert, hängt mein GUI. Ich muss es also abschießen
(ich kann das CLI-Tool zwar per Thread starten, aber spätestens beim Beenden des GUIs hängt sich das auf...)
- Killen per Timeout kommt nicht in Frage
- Schöner Mist

Falls einer eine Idee hat, wäre das klasse!
Danke schon mal für den Aufwand!
Ben
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Bennhardt hat geschrieben:Ich rufe das Tool + Parameter über "subprocess.Popen" auf. Das funktioniert super und klasse und so weiter, aber eben NUR, solange das Tool keinen Fehler wirft. Es gibt ein Szenario, wo das Tool einfach nicht returnt. Ich muss also auf der Kommandozeile ein "ENTER" drücken, damit es weiter geht.
Warum? subprocess.Popen funktioniert generell mal asynchron, also wird dein Programm gestartet und dein Programm wartet nicht, bis es fertig ist.

Davon abgesehen kann man ja versuchen \n an <popenobjekt>.stdin schicken, womit das Enter-drücken dann erledigt wäre.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Bennhardt
User
Beiträge: 15
Registriert: Donnerstag 9. Februar 2006, 14:21
Wohnort: Buchholz in der Nordheide

Leonidas hat geschrieben:Davon abgesehen kann man ja versuchen \n an <popenobjekt>.stdin schicken, womit das Enter-drücken dann erledigt wäre.
Juhu, das hats getan! Danke - Hätte man auch selber drauf kommen können, aber mit diesen Sachen hatte ich mich eben noch nie auseinander gesetzt ;)
Antworten