Seite 1 von 1

Start eines externen Programms mit Argumenten

Verfasst: Montag 17. August 2009, 16:28
von t2t
Hallo Community,

ich bin noch recht neu in der Python Welt und bin gerade nach längerem ausprobieren mit folgendem Problem nicht zurecht gekommen:

Ich möchte mit meinem Python Script, ein externes (von mir geschriebenes) Programm mit Kommandozeilenparametern starten. Dabei soll sich nach Möglichkeit kein CMD Fenster öffnen. Es soll also still und leise im Hintergrund ablaufen.

Ich habe dazu schon folgende Befehle getestet:

Code: Alles auswählen

os.spawnv(os.P_NOWAIT, "\"C:\\test\\meinTool.exe\"", ["\"C:\\test\\meinTool.exe\"", "-h"])
und

Code: Alles auswählen

os.execl("\"C:\\test\\meinTool.exe\"", "\"C:\\test\\meinTool.exe\"", "-h")
Beides schlägt mit einem Invalid Argument Exception fehl. Nur dieser Befehl schein zu gehen:

Code: Alles auswählen

os.system("\"C:\\test\\meinTool.exe\" -h")
Problem hierbei ist, dass sich ein Fenster öffnet und das ganze nicht leise im Hintergrund abläuft.

Ich bin gespannt auf hilfreiche Tipps!

Verfasst: Montag 17. August 2009, 16:33
von cofi
Du willst subprocess nutzen.

Im Uebrigen gibt es Rawstrings (r""), wenn du mit Backslashes in Stringliteralen umgehen musst.

Verfasst: Montag 17. August 2009, 16:50
von t2t
Danke soweit. Ich gekomme mein Tool damit zum laufen, nur leider nicht im "silent mode", es öffnet sich wieder eine CMD. Wie kann ich meine Applikation komplett unterdrückt starten?

Verfasst: Montag 17. August 2009, 16:58
von BlackJack
@t2t: Mit `subprocess`. Das sollte der Normalfall sein. Wenn da ein Fenster gestartet wird, dann machst Du das entweder explizit, oder das Programm sorgt selbst für ein Fenster!? Zeig doch mal was Du genau machst.

Verfasst: Montag 17. August 2009, 17:07
von t2t
Ich habe vor ein .NET Porgramm zu starten, dies geschieht jetzt so:

Code: Alles auswählen

subprocess.Popen('"C:\\test\\meinTool.exe" -h')
Hier wird nun das selbe gemacht, als würde ich eine CMD öffnen und mein Tool mit dem Argument -h starten. Was eine Ausgabe zur folge hat.
Aus anderen Sprachen (z.B. C#) kenne ich die Möglichkeit einen Prozess ohne das Erzeugen eines DOS Fensters zu starten und genau das versuche ich gerade mit Python.

Verfasst: Montag 17. August 2009, 17:34
von Hyperion
Besser:

Code: Alles auswählen

subprocess.Popen([r"C:\test\meinTool.exe", "-h"])

Verfasst: Montag 17. August 2009, 19:04
von fhoech
Aus anderen Sprachen (z.B. C#) kenne ich die Möglichkeit einen Prozess ohne das Erzeugen eines DOS Fensters zu starten und genau das versuche ich gerade mit Python.
Mit subprocess ist das normalerweise kein Problem (und das Standardverhalten, wenn ich mich nicht irre). Ich denke ja eher so wie BlackJack, sprich Dein Programm öffnet vielleicht selbst ein Shell-Fenster. Leg doch mal eine Verknüpfung zu Deinem Programm auf den Desktop, und starte es darüber. Wenn sich wieder ein Shell-Fenster öffnet, weisst Du bescheid :)

Nachtrag: Du startest Dein Python-Skript aber schon mit pythonw.exe (python.exe öffnet immer eine Shell)?

Verfasst: Dienstag 18. August 2009, 08:16
von t2t
Nachtrag: Du startest Dein Python-Skript aber schon mit pythonw.exe (python.exe öffnet immer eine Shell)?
Ich starte mein Skript aus Maya heraus. Da sieht das ganze wohl nochmal anders aus...

Ich danke aber schonmal für die Tipps, ich werde mal weiterprobieren. Vielleicht kann ich die Ausgabe auch tatsächlich programmseitig unterbinden.