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?
Haben Sie versucht, 'subprocess.Popen (r'start D: \ dir_1 \ batch_1.bat ', shell = True, cwd = r'd: \ dir_1') '? – falsetru
mit '&&' sollte funktionieren: 'Popen ('CD D:/Verzeichnis_1/&& Start Batch_1.bat', Shell = True)' – Stack