Beim Umgang mit Unterprozessen stellt die Änderung des Arbeitsverzeichnisses eine Herausforderung dar. Dieses Problem tritt auf, wenn versucht wird, innerhalb von Unterverzeichnissen oder Superverzeichnissen zu navigieren. Der Schlüssel liegt jedoch darin, den Unterschied zwischen dem Aufrufen eines Programms und dem Ausführen eines Befehls zu verstehen.
In Ihrem Code versuchen Sie, ein Programm mit dem Namen „cd“ aufzurufen, was ein ungültiger Ansatz ist. Stattdessen sollten Sie einen Befehl mit dem Namen „cd“ aufrufen.
Fehlererklärung:
Die Anweisung „subprocess.call(['cd ..'])“. löst einen OSError aus, da „cd“ ein Shell-interner Wert ist. Daher müssen Sie es innerhalb einer Shell ausführen, wie in der folgenden Modifikation zu sehen ist:
subprocess.call('cd ..', shell=True)
Warum „shell=True“ sinnlos ist:
Trotzdem scheinbare Lösung, die Verwendung von „shell=True“ ist eigentlich sinnlos. Dies liegt daran, dass kein Prozess das Arbeitsverzeichnis eines anderen Prozesses ändern kann, was bedeutet, dass die Subshell ihr Verzeichnis ändert und sofort beendet wird.
Alternative Lösungen:
Um das Arbeitsverzeichnis erfolgreich zu ändern Bevor Sie einen Unterprozess ausführen, können Sie alternative Methoden nutzen:
Verwenden „os.chdir()“:
wd = os.getcwd() os.chdir("/destination/directory") subprocess.Popen("ls") os.chdir(wd)
Verwendung des „cwd“-Parameters in „subprocess“:
subprocess.Popen("ls", cwd="/destination/directory")
Mit diesen alternativen Ansätzen können Sie das Arbeitsverzeichnis angeben, bevor Sie den Unterprozess ausführen, um sicherzustellen, dass die Befehle korrekt sind im gewünschten Verzeichnis ausgeführt.
Das obige ist der detaillierte Inhalt vonWie ändere ich das Arbeitsverzeichnis für Unterprozesse in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!