2017-06-29 2 views
0

I aa Dateistruktur haben wie die folgende (Windows):in anderen Verzeichnis

D:\ 
    dir_1\ 
     batch_1.bat 
     dir_1a\ 
      batch_2.bat 
    dir_2\ 
     main.py 

Für die Zwecke dieser Frage, batch_1.bat ruft einfach batch_2.bat, und sieht aus wie:

cd dir_1a 
start batch_2.bat %* 

Öffnen von batch_1.bat von einer Eingabeaufforderung öffnet in der Tat batch_2.bat, wie es soll, und von da an ist alles golden.

Jetzt möchte ich meine Python-Datei, D:\dir_2\main.py, einen neuen Prozess spawnen, der batch_1.bat startet, der wiederum batch_2.bat starten sollte. Also habe ich die folgende Python-Code funktionieren sollte:

import subprocess 

subprocess.Popen(['cd "D:/dir_1"', "start batch_1.bat"], shell=True) 

Dies führt zu „Das System kann den Weg nicht finden spezifiziert“, um meine Python-Konsole gedruckt wird. (Es wird natürlich kein Fehler angezeigt.) Dies ist auf den ersten Befehl zurückzuführen. Ich bekomme das gleiche Ergebnis, auch wenn ich es bis auf die Lautstärke:

subprocess.Popen(['cd "D:/"'], shell=True) 

Ich habe auch versucht, direkt die Batch-Datei starten, etwa so:

subprocess.Popen("start D:/dir_1/batch_1.bat", shell=True) 

Aus Gründen, die ich ganz nicht bekommen, diese scheint nur eine Windows-Eingabeaufforderung zu öffnen, in dir_2.

Wenn ich auf den start Teil dieses Befehls verzichten, dann wird mein Python-Prozess am Ende warten auf batch_1 zu beenden, was ich nicht will. Aber es bekommen hat ein wenig weiter:

subprocess.Popen("D:/dir_1/batch_1.bat", shell=True) 

Dies führt zu batch_1.bat erfolgreich Ausführung ... in dir_2, das Verzeichnis des Python-Skript, anstatt das Verzeichnis von batch_1.bat, was dazu führt, es nicht zu finden in der Lage, dir_1a\ und daher wird batch_2.bat überhaupt nicht ausgeführt.

Ich bin sehr verwirrt. Was mache ich falsch und was soll ich stattdessen tun?

+0

Haben Sie versucht, 'subprocess.Popen (r'start D: \ dir_1 \ batch_1.bat ', shell = True, cwd = r'd: \ dir_1') '? – falsetru

+0

mit '&&' sollte funktionieren: 'Popen ('CD D:/Verzeichnis_1/&& Start Batch_1.bat', Shell = True)' – Stack

Antwort

Verwandte Themen