[Python-de] subprocess mit callback
Florian Lindner
mailinglists at xgm.de
Sa Jul 2 12:25:37 CEST 2011
Am Dienstag 28 Juni 2011, 21:10:46 schrieb Hans-Peter Jansen:
> On Tuesday 28 June 2011, 16:25:04 Florian Lindner wrote:
> > Am Dienstag 21 Juni 2011, 04:40:41 schrieb Alexander Schlarb:
> > > Du könntest auch einfach bei dem Funktionsparameter popen_args ein
> > > Sternchen davor machen:
> > >
> > > def popen_callback(on_exit, *popen_args):
> > > ----------------------------^
> > >
> > > Python interpretiert das dann als wirf den ganzen Rest bitte in
> > > diese Liste.
> > >
> > > Noch besser wäre es wenn du dahinter dann noch **popen_kwargs setzt
> >
> > > und an Popen übergibst:
> > Wunderbar, danke! Habe es jetzt so umgesetzt.
> > 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?
>
> Hmm, ich habe hier eine Lösung, von der ich nicht genau weiss, ob sie zu
> Deinem Problem passt, aber mal reinschauen kostet ja nichts (ausser ein
> paar Kalorien ;):
>
> http://micheles.googlecode.com/hg/decorator/documentation.html#async
Das Modul mit den async decorator schaut schon sehr attraktiv aus. Allerdings
habe ich noch ein Problem bei der Benutzung:
async = Async(threading.Thread)
In [7]: @async
...: def add(b):
...: return b+2
...:
In [8]: add(4)
Out[8]: <Thread(add-1, stopped 139819357185792)>
Das klappt soweit alles ganz gut. Wenn ich allerdings die callback funktionen
benutzen will, bekomme ich es nicht hin:
In [9]: def os(result):
...: print "Success", result
In [13]: @async(on_success=os)
....: def add(b):
....: return b+2
....:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/florian/SA/src/<ipython console> in <module>()
TypeError: __call__() takes at least 2 arguments (2 given)
Einige andere Aufrufkonventionen haben bei mir ebenfalls nicht zum Erfolg
geführt.
Siehst Du, wie es richtig geht?
Danke & Grüße,
Florian
Mehr Informationen über die Mailingliste python-de