subprocess.Popen mit relativen Pfaden

8

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ändert    cwd , 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 zu cwd .

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 )

    
wim 28.01.2014, 17:31
quelle

1 Antwort

7

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.

    
Martijn Pieters 28.01.2014, 17:36
quelle

Tags und Links