[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