2016-07-30 20 views
-2

ich die Batch-Lauf (ist es in anderen Ordnern als der Python-Skript) die Verwendung folgenden Codezeilen:Batch von Python-Skript ausgeführt werden, wirken, wie es in dem Ordner des Skripts ist

subprocess.Popen("the_bat.bat", creationflags=subprocess.CREATE_NEW_CONSOLE) 

Die Aufgabe der batch ist ein .jar (dasselbe Verzeichnis wie batch), das Ordner und Dateien in seinem Verzeichnis erstellt, aber wenn es vom Python-Skript ausgeführt wird, startet der jar den Job im Ordner des Skripts. Haben Sie Vorschläge, wie Sie das verhindern können?

+2

Batch-Datei ist die '% 0 'Parameter. 'Echo% ~ dp0' druckt den Ordner der Stapelverarbeitungsdatei. Siehe 'Anruf /?'. –

+0

Das Verzeichnis, aus dem ein Programm geladen wird, ist nicht dasselbe wie das aktuelle Verzeichnis. Sie können das aktuelle Arbeitsverzeichnis des untergeordneten Prozesses mit dem Parameter 'cwd' auf' Popen' setzen. – cdarke

+0

Code-Formatierung beim nächsten Mal verwenden –

Antwort

0

Dies liegt daran, dass das Bash-Skript im Python-Arbeitsverzeichnis ausgeführt wird, wodurch das Arbeitsverzeichnis des Bash-Skripts dasselbe ist wie das von Python. Sie können dies beheben, indem Sie ein aktuelles Arbeitsverzeichnis an die subprocess.Popen übergeben.

subprocess.Popen(r'your script', cwd=r'd:\the\working\directory\you\want\or\root')