2012-11-01 8 views
9

Ich habe eine externe ausführbare Datei, die ich aus einem Python-Skript ausführen möchte. Die ausführbare CMD-Datei wird ausgeführt, jedoch ohne Ausgabe. Wahrscheinlich wird es beendet, bevor die Ausgabe erzeugt werden kann. Irgendwelche Vorschläge, wie Sie den Exit verzögern können, bis Ausgaben generiert werden?Wie externe ausführbare Datei mit Python ausführen?

import subprocess, sys 
from subprocess import Popen, PIPE 
exe_str = r"C:/Windows/System32/cmd C:/temp/calc.exe" 

parent = subprocess.Popen(exe_str, stderr=subprocess.PIPE) 
+2

Wahrscheinlich besser, dies auf Stackoverflow zu fragen? – Simbamangu

+1

Ist die Frage im Zusammenhang mit GIS? – Mapperz

+0

Vielleicht hast du recht. Eingabedaten sind Höhe und Flussrichtung, deshalb habe ich sie hier gepostet. –

Antwort

9

Verwendung subprocess.call, weitere Informationen here:

import subprocess 
subprocess.call(["C:\\temp\\calc.exe"]) 

oder

import os 
os.system('"C:/Windows/System32/notepad.exe"') 

ich hoffe, dass es Ihnen hilft ...

+0

Es läuft, aber ohne Ausgabe zu erzeugen. Ich habe ausführbare Datei mit cmd getestet und es dauert mindestens 2-3 Sekunden, bevor die Ausgabe generiert wird. Dies ist das Problem, wie es für 3 Sekunden vor dem Beenden mit Python zu bleiben? –

+2

'Importzeit time.sleep (3)' – Aragon

+1

Seltsam. Selbst bei 3 Sekunden Bedingung hat es keine Ausgabe erzeugt. Ich habe die Zeit erhöht, aber keinen Nutzen. Nicht sicher, was sonst könnte das Problem sein. –

6

Die os.system Methode abgeschrieben wird und sollte nicht in neuen Anwendungen verwendet. Das Unterprozessmodul ist die pythonische Art, das zu tun, was Sie benötigen.

Hier ist ein Beispiel für einige Code, den ich vor ein paar Wochen subprocess mit schrieb Dateien zu laden, den Befehl, den Sie benötigen Ausfahrt zu verzögern, zu verwenden, bis die Daten und das gestartete Programm beendet empfangen wurde ist wait():

import subprocess 

cmd = "c:\\file.exe" 
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, creationflags=0x08000000) 
process.wait() 

creationflags=0x08000000 ist ein optionaler Parameter, der das Starten eines Fensters unterdrückt, was nützlich sein kann, wenn das Programm, das Sie aufrufen, nicht direkt gesehen werden muss.

+0

Es erzeugt immer noch keine Ausgänge. Läuft tadellos vom cmd Fenster aber keine Ausgabe, die pythonartig verwendet, wie Sie vorschlugen. –