Seite 1 von 1

Lösung für Aufsplitten für subprocess.Popen gesucht

Verfasst: Mittwoch 16. November 2011, 15:56
von Francesco
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):

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)
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.

Re: Lösung für Aufsplitten für subprocess.Popen gesucht

Verfasst: Mittwoch 16. November 2011, 16:22
von BlackJack
@Francesco: Lies mal die Doku zum `subprocess`-Modul. Da steht auch wie man eine Kommandozeile so aufteilen kann.

Re: Lösung für Aufsplitten für subprocess.Popen gesucht

Verfasst: Mittwoch 16. November 2011, 17:04
von Francesco
BlackJack hat geschrieben:@Francesco: Lies mal die Doku zum `subprocess`-Modul. Da steht auch wie man eine Kommandozeile so aufteilen kann.
Ok, danke für den Hinweis, BlackJack. Habe die Erwähnung von shlex zu schnell überlesen. :)