Start eines externen Programms mit Argumenten

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
t2t
User
Beiträge: 4
Registriert: Montag 17. August 2009, 16:13

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!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Du willst subprocess nutzen.

Im Uebrigen gibt es Rawstrings (r""), wenn du mit Backslashes in Stringliteralen umgehen musst.
t2t
User
Beiträge: 4
Registriert: Montag 17. August 2009, 16:13

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?
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.
t2t
User
Beiträge: 4
Registriert: Montag 17. August 2009, 16:13

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Besser:

Code: Alles auswählen

subprocess.Popen([r"C:\test\meinTool.exe", "-h"])
fhoech
User
Beiträge: 143
Registriert: Montag 9. April 2007, 18:26

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)?
t2t
User
Beiträge: 4
Registriert: Montag 17. August 2009, 16:13

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