[Python-de] subprocess mit callback

Florian Lindner mailinglists at xgm.de
Mo Jun 20 22:18:23 CEST 2011


Am Montag 20 Juni 2011, 21:17:22 schrieb Alexander Schlarb:
> Er sagt bufsize must be integer
> dh: Du musst einen Integer anstelle eines Strings übergeben (=keine
> Anführungszeichen!)
> 
>   common.popen_callback(cb, ["sleep", 10])

Sorry, habe mich da ungenau ausgedrückt. Das auszuführende Kommando soll 
"sleep 10" (idR /usr/bin/sleep) sein. Popen erwartet in args ja eine Liste mit 
dem Executable und den Parametern (ausg. shell=True). Mein Problem ist gerade, 
dass die "10" in buffsize landet und nicht Teil der Liste für args bleibt.

Grüße,

Florian

>   -----------------------------------^
> 
> -----Original Message-----
> From: Florian Lindner <mailinglists at xgm.de>
> Reply-to: Die Deutsche Python Mailingliste <python-de at python.org>
> To: python-de at python.org
> Subject: [Python-de] subprocess mit callback
> Date: Mon, 20 Jun 2011 20:46:14 +0200
> 
> Hallo,
> 
> ich würde gerne, ein subprocess Popen ein Prozeß aufrufen und mich
> benachrichtigen lassen, wenn dieser fertig ist. Da habe ich auch einen Tipp
> gefunden:
> 
> http://stackoverflow.com/questions/2581817/python-subprocess-callback-when-
> cmd- exits
> 
> mit modifizierten Namen schaut das so aus:
> 
> def popen_callback(on_exit, popen_args):
>     def threaded_run(on_exit, popen_args):
>         print popen_args
>         proc = subprocess.Popen(*popen_args)
>         proc.wait()
>         on_exit()
>         return
>     thread = threading.Thread(target=threaded_run, args=(on_exit,
> popen_args)) thread.start()
>     return thread
> 
> Nur habe ich leider Probleme das aufzurufen:
> 
> 
> In [29]: common.popen_callback(cb, ["sleep", "10"])
> ['sleep', '10']
> Out[29]: <Thread(Thread-12, started 140538833995520)>
> Exception in thread Thread-12:
> Traceback (most recent call last):
>   File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
>     self.run()
>   File "/usr/lib/python2.7/threading.py", line 505, in run
>     self.__target(*self.__args, **self.__kwargs)
>   File "common.py", line 21, in threaded_run
>     proc = subprocess.Popen(*popen_args)
>   File "/usr/lib/python2.7/subprocess.py", line 629, in __init__
>     raise TypeError("bufsize must be an integer")
> TypeError: bufsize must be an integer
> 
> cb ist meine callback funktion.
> 
> Ich nehme mal an, er interpretiert die "10" als das zweite Argument für
> Popen. Eine Reihe von anderen Methoden führte leider auch nicht zum
> Erfolg. Auch auf die Gefahr hin, mich hier lächerlich zu machen: Wie rufe
> ich das auf?
> 
> ;-)
> 
> Danke!
> 
> Florian
> _______________________________________________
> python-de maillist  -  python-de at python.org
> http://mail.python.org/mailman/listinfo/python-de



Mehr Informationen über die Mailingliste python-de