Lösung für Aufsplitten für subprocess.Popen gesucht
Verfasst: Mittwoch 16. November 2011, 15:56
Hallo,
ich war wieder einmal etwas länger weg von Python.
Ich suche eine einfach Möglichkeit, einen Systembefehl auszuführen. Nun gibt es ja verschiedene Möglichkeiten (os.system, os.spawn..., subprocess.Popen, ...)
Die Sache ist die, dass ich nicht warten will, bis der externe Befehl fertig ist (sonst hätte ich einfach os.system verwendet).
Nun wird ja empfohlen, das Subproces Modul zu verwenden. Mein "Problem" ist, dass ich öfters eine lange Argumentliste habe und man die beim subprocess.Popen so "komisch" übergeben muss.
Frage:
1) was ist die einfachste Möglichkeit, einen Befehl "asynchron" ausführen zu lassen (so dass das Python Programm in der Zwischenzeit weiterläuft) (P_NOWAIT).
2) Wenn ich eine Funktion machen will, die die Argumente für Popen aufsplittet, könnte ich ja einfach split() (also durch Spaces splitten) aufrufen. Nur geht das nicht immer, weil manchmal Pfade mit Spaces übergeben werden. Also ich suche etwas in der Art:
von mir aus CallOsCommand ("meinprog -v 2 --test:mode 2 -l mein.xml -d /home/franz/work/My Documents/")
dieses CallOsCommand soll dann die Argumente für subprocess.Popen vorbereiten.
Jetzt sieht das so umständlich aus (code snippet habe ich mit google gefunden und für mich angepasst):
Das ganze bräuchte ich für ein wxPython Script, aus dem ich aus einer Listbox verschiedene Commandos auswählen kann, und das ausgewählte dann ausgeführt wird.
ich war wieder einmal etwas länger weg von Python.
Ich suche eine einfach Möglichkeit, einen Systembefehl auszuführen. Nun gibt es ja verschiedene Möglichkeiten (os.system, os.spawn..., subprocess.Popen, ...)
Die Sache ist die, dass ich nicht warten will, bis der externe Befehl fertig ist (sonst hätte ich einfach os.system verwendet).
Nun wird ja empfohlen, das Subproces Modul zu verwenden. Mein "Problem" ist, dass ich öfters eine lange Argumentliste habe und man die beim subprocess.Popen so "komisch" übergeben muss.
Frage:
1) was ist die einfachste Möglichkeit, einen Befehl "asynchron" ausführen zu lassen (so dass das Python Programm in der Zwischenzeit weiterläuft) (P_NOWAIT).
2) Wenn ich eine Funktion machen will, die die Argumente für Popen aufsplittet, könnte ich ja einfach split() (also durch Spaces splitten) aufrufen. Nur geht das nicht immer, weil manchmal Pfade mit Spaces übergeben werden. Also ich suche etwas in der Art:
von mir aus CallOsCommand ("meinprog -v 2 --test:mode 2 -l mein.xml -d /home/franz/work/My Documents/")
dieses CallOsCommand soll dann die Argumente für subprocess.Popen vorbereiten.
Jetzt sieht das so umständlich aus (code snippet habe ich mit google gefunden und für mich angepasst):
Code: Alles auswählen
import subprocess
command = ["meinprog"]
arguments = ["-v", "2", "--test:mode 2" , "-l", "mein.xml", "-d", "/home/franz/work/My Documents/"]
command.extend(arguments)
subprocess.Popen(command)