2012-04-05 3 views
2

Mögliche Duplizieren:
Running a process in pythonw with Popen without a console
How do I eliminate Windows consoles from spawned processes in Python (2.7)?Python Aufruf externe Programme ohne Konsole öffnen (DOS-Eingabeaufforderung)

Ich verwende Python 2.7 und den Python-Skripte aus IDLE laufen.

Die Befehle, die ich ausführe, sind einfache EXEs, die schnelle Aufgaben ausführen. Das Problem, das ich habe, ist jedes Mal, wenn die externen Befehle aus Python aufgerufen werden, eine Konsole wird erstellt und es blinkt auf meinem Bildschirm und nimmt den Fokus, so dass ich meinen PC während der Ausführung verschiedener Skripts verwenden.

Beispiele, wie ich sie aus Python nenne sind wie folgt:

result = call(["Commands\Set.exe", str(i), ARG2]) 
check_output(["Commands\Read.exe", ARG2]) 

Suche nach einer Lösung stieß ich auf die folgende

Zugabe
shell=True 

den folgenden Befehl

zu machen
check_output(["Commands\Read.exe", ARG2], shell=True) 

Allerdings bekomme ich immer noch die Konsole erscheint jedes Mal, wenn ein externer Befehl aufgerufen wird

Antwort

4

Hier können zwei Probleme auftreten. Zunächst einmal, wenn Ihre Python-Skripte die Erweiterung .pyw haben, werden sie mit pythonw verknüpft, das keine Konsole * verwendet. Sie haben jedoch shell = True, wodurch eine Konsole * generiert wird. Sie müssen das Programm und Ausblenden der Konsole auszuführen:

import subprocess 
proc = subprocess.Popen('hello.py', creationflags=subprocess.SW_HIDE, shell=True) 
proc.wait() 

* Pedantisch, es ist nicht eine DOS-Eingabeaufforderung, es ist ein Konsolenfenster. DOS - Disk Operating System - war ein IBM Mainframe-Betriebssystem. MS-DOS- oder PC-DOS-Befehlszeilenfeatures wurden von cmd.exe (einer Windows-Shell) gespiegelt (mit vielen zusätzlichen Features), einem Konsolenprogramm, das ein Konsolenfenster verwendet. Es ist dieses Konsolenfenster, das du verstecken musst.

+0

ok Ich habe versucht, die creationflags = subprocess.SW_HIDE, shell = True auf die check_output Zeile und ich bekomme immer noch eine * Konsole * Fenster erscheinen .... – smashtastic

+0

ein anderer Kommentar ... Ich habe meine Frage aktualisiert, um die zu reflektieren Konsolenbenutzung ... Ich denke, für Vollständigkeit könnte ein "Konsolenfenster mit DOS-Eingabeaufforderung" sagen, weil "C: \>" eigentlich eine dos promopt im Vergleich zu anderen Konsolen ist, die unterschiedliche Eingabeaufforderungen für zB >>>> in Python geben ... jetzt denke ich, das ist wirklich pedantisch .... – smashtastic

+0

btw Ich rufe exe-Dateien nicht Python-Skripte .... Frage aktualisiert. – smashtastic

1

Sie müssen startupinfo Parameter von subprocess.Popen() Klasse 'constructor verwenden.

startupinfo = subprocess.STARTUPINFO() 
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
startupinfo.wShowWindow = subprocess.SW_HIDE 
subprocess.Popen(command, startupinfo=startupinfo) 

Sie brauchen nichtshell=True, wenn alles, was Sie Konsole Fenster ausblenden möchten; siehe this Antwort.

Verwandte Themen