[Python-de] subprocess mit callback
Peter Otten
__peter__ at web.de
Mo Jul 4 13:57:09 CEST 2011
Florian Lindner wrote:
> Am Samstag 02 Juli 2011, 17:35:00 schrieb Stefan Schwarzer:
>> Hallo Florian,
>>
>> On 2011-07-02 12:25, Florian Lindner wrote:
>> > Am Dienstag 28 Juni 2011, 21:10:46 schrieb Hans-Peter Jansen:
>> >> On Tuesday 28 June 2011, 16:25:04 Florian Lindner wrote:
>> > 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
>>
>> ich würde eher davon abraten, eine Funktion so zu nennen wie
>> ein häufig benutztes Modul aus der Standard-Bibliothek. Das
>> kann leicht zu Verwirrung führen.
>
> Klaro, das war so nur in die Shell gehackt.
>
>> > TypeError: __call__() takes at least 2 arguments (2 given)
>>
>> Die Methode akzeptiert mindestens zwei Parameter, die du
>> auch angegeben hast, aber du bekommst einen TypeError dazu?
>> Hast du die Fehlermeldung richtig übernommen?
>
> Ein komplettes Skript schaut jetzt so aus:
>
> from common import Async
> import threading
>
> async = Async(threading.Thread)
>
> def o_s(result):
> print "Success: ", result
>
> @async(on_success=o_s)
> def add(x):
> return x+2
>
> res = add(2)
> print res
>
> und wenn es ausgeführt wird:
>
> florian at horus ~/SA/src (git)-[master] % python2 test.py
> Traceback (most recent call last):
> File "test.py", line 9, in <module>
> @async(on_success=o_s)
> TypeError: __call__() takes at least 2 arguments (2 given)
> Version von python ist 2.7.2.
Faszinierende Fehlermeldung; Python 2.6 ist dagegen richtig langweilig:
> $ python async.py
Traceback (most recent call last):
File "async.py", line 68, in <module>
@async(on_success=on_success)
TypeError: __call__() takes at least 2 non-keyword arguments (1 given)
> Wenn ich den Dekorator ohne Argumente
> benutze funktioniert es, aber halt kein Callback.
Probier es mal zu Fuß:
def add(x):
return x + 2
add = async(add, on_success=o_s)
Mehr Informationen über die Mailingliste python-de