[Python-de] subprocess mit callback

Peter Otten __peter__ at web.de
Mo Jul 11 09:35:44 CEST 2011


Florian Lindner wrote:

>     def call(self, func, *args, **kw):
>         def func_wrapper():
>             try:
>                 result = func(*args, **kw)
>             except:
>                 if "self" in getargspec(func.on_failure).args:
>                     func.on_failure(args[0], sys.exc_info())
>                 else:
>                     func.on_failure(sys.exc_info())
>             else:
>                 if "self" in getargspec(func.on_success).args:
>                     return func.on_success(args[0], result)
>                 else:
>                     return func.on_success(result)
>             finally:
>                 if "self" in getargspec(func.on_closing).args:
>                     func.on_closing(args[0])
>                 else:
>                     func.on_closing()
>         name = '%s-%s' % (func.__name__, func.counter.next())
>         thread = self.threadfactory(None, func_wrapper, name)
>         thread.start()
>         return thread
> 
> 
> In call() überprüfe ich die Signaturen der Callback-Funktionen und gebe
> ggfs. noch das entsprechende self, welches ich aus args[0] bekomme mit.
> getargspec stammt aus dem Modul inspect.
> 
> Siehst Du da noch irgendwelche Probleme

Keine Probleme, die in der Praxis auftreten. Einen Trick sauber zwischen 
Methoden und Funktionen zu unterscheiden gibt's wohl nicht.

> oder Verbesserungen?

Vielleicht könntest du den argspec-Voodoo in die __call__()-Methode 
verlagern.



Mehr Informationen über die Mailingliste python-de