[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