[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