subprocess.call - Kommandozeile schließt sich automatisch

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
Meeper
User
Beiträge: 15
Registriert: Donnerstag 14. Februar 2013, 17:41

Hallöchen,
mit dem subprocess-Modul kann man Befehle über die cmd.exe in Windows ausführen (z.B. ein Programm aufrufen). Leider wird die cmd immer sofort geschlossen, wenn der subprocess.call("Aufruf") durchgelaufen ist. Das Programm welches ich aufrufe, gibt aber etwas in ebendieses Konsolenfenster aus, und ich suche jetzt nach einer Möglichkeit wie ich verhindern kann dass sich dieses schließt :)
Und wenn wir schon dabei sind, gibt es vielleicht auch eine Möglichkeit, sich den Konsolen-Output in ein file schreiben zu lassen?
Danke für die Hilfe^^

Hier ein kleines Beispiel:

Code: Alles auswählen

#File: C:\beispiel.py
print("Dieser Text ist leider nur für den Bruchteil einer Sekunde sichtbar :(")

Code: Alles auswählen

import subprocess
subprocess.call("C:\beispiel.py")
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

Dazu müsstest man wissen welche Konsole du öffnen möchtest. Bzw. du gibts subprocess call den gleichen Befehl mit, den du in das Terminal tippen würdest, damit sich ein neues Terminal öffnet und das Programm darin ausgeführt wird.
Unter Windows kannst du dafür ein Flag setzen.

Code: Alles auswählen

subprocess.call("sleep 3", creationflags = subprocess.CREATE_NEW_CONSOLE)

Soweit ich die Dokumentation verstehe sollte ein shell=True als Parameter auch funktionieren, dem ist aber bei bei mir nicht so.
Das Python Skript muss halt so lange laufen wie du es gerne hättest, damit das Fenster nicht gleich wieder geschlossen wird. Z.B. kannst du am Ende des Skripts auf eine Nutzereingabe warten.
Um den Output in eine Datei zu schreiben:

Code: Alles auswählen

out= open("output.txt","w")
err = open("error.txt","w")
subprocess.call("dir", creationflags = subprocess.CREATE_NEW_CONSOLE,stdout=out,stderr=err)
Unter Linux halt statt des creationflags den parameter shell=True übergeben und beim auszuführenden Kommando den Befehl um die Konsole zu öffnen.
Antworten