[Python-de] subprocess mit callback
Florian Lindner
mailinglists at xgm.de
Do Jun 30 17:45:04 CEST 2011
Am Mittwoch 29 Juni 2011, 21:40:40 schrieb Ulf Rompe:
> Am 28.06.2011 16:25, schrieb Florian Lindner:
> > Siehst Du eigentlich eine Möglichkeit, wie man den Code so formulieren
> > kann, dass ich anstelle des Thread() Objektes ein Popen() Objekt
> > zurückgeben kann?
>
> Ich bin zwar nicht gefragt, antworte aber einfach trotzdem:
Gut, dass Du Dich auch angesprochen fühlt, ich antworte ja der Liste und
weniger den Personen. ;-)
Ich habe jetzt zwei Möglichkeiten mein Problem zu lösen. Erstmal kurz zu
meinem Problem.
Ich schreibe eine Job/Queue-Kontrolle für recht lang laufende Jobs (numerische
Berechnungen). Eine Job-Klasse soll über ihren Status (finished, running,
waiting, evtl. failed) Auskunft geben. Zu dieser Statusinformation kann ich
nun auf zwei Arten gelangen:
- Ich nehme das Popen-Objekt und schaue, was mir poll() zurückgibt (Methode
nach Ulf)
- Ich benutze callbacks und setzte da meinen Status entsprechend. (Methode
nach Hans-Peter)
Nun frage ich mich natürlich, was die Methoden für Vor- und Nachteile haben.
Mit poll() ist meine Klasse an sich erstmal zustandslos, es kann also auch
nichts schiefgehen beim Setzen des Zustandes.
Mit dem Callbacks wiederum habe ich die Möglichkeit noch Aktionen beim
Abschluss des Jobs auszulösen (z.B. Mail verschicken).
Was ist Eure Meinung dazu?
Es darf - nein soll! - jeder antworten! :-D
Grüße,
Florian
> def popen_callback(on_exit, *popen_args, **popen_kwargs):
> def threaded_run(on_exit, process):
> process.wait()
> on_exit()
> print popen_args, popen_kwargs
> proc = subprocess.Popen(*popen_args, **popen_kwargs)
> thread = threading.Thread(target=threaded_run, args=(on_exit, proc))
> thread.start()
> return proc
>
>
> Anstelle des ganzen Popen-Objektes könnte man auch lediglich die
> wait()-Methode an threaded_run() übergeben und so aufrufen wie on_exit
> auch. Damit würde man die Funktion vielleicht etwas allgemeiner halten.
Mehr Informationen über die Mailingliste python-de