2016-04-17 3 views
1

Ich bin eine Anwendung in meinem Code ausgeführt, und es schreibt Dateien neu, die ich später im Code lesen muss. Es gibt keine Ausgabe die direkt in mein Programm geht. Ich kann meinen Code nicht warten lassen, bis der Subprozess beendet ist, es geht einfach weiter und liest die unveränderten Dateien.Warten auf Unterprozess .exe zu beenden, bevor Sie in Python gehen

Ich habe proprocess.Popen.wait(), subprocess.call() und subprocess.check_call() versucht, aber keiner von ihnen funktioniert für mein Problem. Hat jemand eine Idee, wie das funktioniert? Vielen Dank.

Edit: Hier ist der relevante Teil meines Code:

os.chdir('C:\Users\Jeremy\Documents\FORCAST\dusty') 
    t = subprocess.Popen('start dusty.exe', shell=True) 
    t.wait()  
    os.chdir('C:\Users\Jeremy\Documents\FORCAST') 
+0

Menschen beschweren sich normalerweise über das Gegenteil; d.h. blockierende Unterprozesse. Wie sieht dein Code aus? (Fügen Sie es der Frage hinzu) – jDo

+2

Vielleicht erzeugt die Anwendung einen separaten Prozess und kehrt sofort danach zurück. – martineau

+0

Wie würde ich wissen, wenn das passiert, und wenn ja, wie würde ich es lösen? – Spuds

Antwort

0

Sie das Rückgabeobjekt von subprocess.Popen Verwenden Sie()?

p = subprocess.Popen(command) 
p.wait() 

sollte funktionieren.

Sind Sie sicher, dass der Befehl nicht sofort beendet wird?

+0

Das habe ich jetzt. Der Befehl wird ausgeführt, aber mein Code wartet nicht. – Spuds

+0

Zeigen Sie Ihren Code dann bitte und schauen Sie sich den Kommentar von @martineau zu Ihrer Frage an –

0

Wenn Sie ausführen ein Programm mit

t = subprocess.Popen(prog, Shell=True) 

Python wird ein Fehler ausgegeben, unabhängig davon, ob das Programm vorhanden ist oder nicht. Wenn Sie versuchen, ein nicht vorhandenes Programm mit Popen und Shell = False zu starten, erhalten Sie einen Fehler. Meine Vermutung wäre, dass Ihr Programm entweder nicht im Ordner existiert oder nicht ausgeführt wird. Versuchen Sie, in der Python IDLE-Umgebung mit Shell = False auszuführen und sehen Sie, ob Sie ein neues Fenster erhalten.