Ich habe ein Problem, das mit den verschachtelten Aufrufen zusammenhängen sollte, die ich mache.
RunProgram () -> cmd -> Python
Die folgende Fledermausdatei funktioniert einwandfrei.
set JMP_PYTHON_PTH=%UserProfile%\miniconda_JMP\
CALL %JMP_PYTHON_PTH%\Scripts\activate.bat %JMP_PYTHON_PTH%
start /B /wait "" python test.py
Bei Verwendung von RunProgram () schlägt der Code jedoch fehl, es sei denn, ich füge der Python-Datei den absoluten Pfad hinzu (test.py -> 'C: /a/b/c/test.py').
ClearLog();
file_path = ConvertFilePath( "./tests/run_python_installation_test.bat", windows);
rp = RunProgram( Executable( "cmd.exe" ),
Options( {"/C", file_path} ),
ReadFunction("text") // returns all text
);Der Fehler, den ich wieder bekomme, nur wenn der absolute Pfad nicht angegeben ist, ist der folgende.
(base) C:\WINDOWS\system32>start /B /wait \!"\!" python test.py
python: can't open file 'test.py': [Errno 2] No such file or directory
Wenn ich das laufen lasse
file_path = convertfilepath("$temp/x.bat","windows");
savetextfile(file_path, "dir\!n");
rp = RunProgram( Executable( "cmd.exe" ),
Options( {"/C", file_path} ),
ReadFunction("text") // returns all text
);Es scheint, dass das Arbeitsverzeichnis für die Ausführung der Bat-Datei mein Desktop-Verzeichnis ist. Ich denke, Python wird das Arbeitsverzeichnis verwenden, um den Dateinamen auch in der Befehlszeile zu finden. Die Verwendung des vollständigen Pfadnamens scheint eine gute Wahl zu sein.
https://superuser.com/questions/396394/how-do-i-set-an-executables-working-directory-via-the-command-line-prior-to-ex schlägt vor, dass Sie das Arbeitsverzeichnis in Ihrem Startbefehl angeben können:
START /D c:\temp notepad.exe