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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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

@Francesco: Lies mal die Doku zum `subprocess`-Modul. Da steht auch wie man eine Kommandozeile so aufteilen kann.
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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