Die Dokumente für Popen erwähnen, dass Sie Ihren ausführbaren Pfad nicht relativ angeben können zum 'Arbeitsverzeichnis wechseln' kwarg.
Wenn
cwd
nicht None ist, wird das aktuelle Verzeichnis des untergeordneten Elements in geändertcwd
, bevor es ausgeführt wird. Beachten Sie, dass dieses Verzeichnis nicht vorhanden ist Wenn Sie die ausführbare Datei durchsuchen, können Sie die Datei nicht angeben Programmpfad relativ zucwd
.
Aber Pythons Verhalten auf meinem System scheint dieser Behauptung direkt zu widersprechen:
%Vor% Verwendet relative Pfade zu cwd
etwas, das plattformabhängig ist und auf das man sich nicht verlassen sollte? Oder ist das ein Dokumentationsfehler?
(Diese Frage kommt von einem Kommentar von glglgl hier )
Ja, dies ist plattformabhängig.
Auf POSIX-Systemen wird der Prozess gegabelt und im Child-Prozess wird ein os.chdir(cwd)
ausgeführt, bevor die ausführbare Datei ausgeführt wird.
Unter Windows jedoch die CreateProcess()
API Aufruf wird verwendet und cwd
wird als Parameter lpCurrentDirectory
übergeben. Es findet keine Verzeichnisänderung statt, und der CreateProcess()
-Aufruf nicht konsultiert diesen Parameter, wenn er nach dem auszuführenden lpApplicationName
sucht.
Damit Ihre Anwendung plattformübergreifend bleibt, sollten Sie nicht darauf vertrauen, dass das aktuelle Arbeitsverzeichnis beim Suchen der ausführbaren Datei geändert wird.
Tags und Links python path popen subprocess cwd