cd
ist der Shell-Befehl zum Wechseln des Arbeitsverzeichnisses.
Wie kann ich das aktuelle Arbeitsverzeichnis in Python ändern?
cd
ist der Shell-Befehl zum Wechseln des Arbeitsverzeichnisses.
Wie kann ich das aktuelle Arbeitsverzeichnis in Python ändern?
Sie können das Arbeitsverzeichnis mit ändern:
import os
os.chdir(path)
Bei der Anwendung dieser Methode sind zwei bewährte Verfahren zu beachten:
Ein Wechsel des aktuellen Arbeitsverzeichnisses in einem Unterprozess ändert nicht das aktuelle Arbeitsverzeichnis im übergeordneten Prozess. Dies gilt auch für den Python-Interpreter. Sie können nicht mit os.chdir()
um den CWD des Aufrufprozesses zu ändern.
Hier ist ein Beispiel für einen Kontextmanager zum Ändern des Arbeitsverzeichnisses. Es ist einfacher als ein ActiveState-Version auf die an anderer Stelle verwiesen wird, aber damit ist die Sache erledigt.
cd
import os
class cd:
"""Context manager for changing the current working directory"""
def __init__(self, newPath):
self.newPath = os.path.expanduser(newPath)
def __enter__(self):
self.savedPath = os.getcwd()
os.chdir(self.newPath)
def __exit__(self, etype, value, traceback):
os.chdir(self.savedPath)
Oder versuchen Sie die knappere Entsprechung (unten) , mit ContextManager .
import subprocess # just to call an arbitrary command e.g. 'ls'
# enter the directory like this:
with cd("~/Library"):
# we are in ~/Library
subprocess.call("ls")
# outside the context manager we are back wherever we started.
cd()
ist mit Hilfe eines Generators und eines Dekorators leicht zu schreiben.
from contextlib import contextmanager
import os
@contextmanager
def cd(newdir):
prevdir = os.getcwd()
os.chdir(os.path.expanduser(newdir))
try:
yield
finally:
os.chdir(prevdir)
Dann wird das Verzeichnis auch nach dem Auftreten einer Ausnahme wiederhergestellt:
os.chdir('/home')
with cd('/tmp'):
# ...
raise Exception("There's no place like /home.")
# Directory is now back to '/home'.
Ich würde verwenden os.chdir
wie diese:
os.chdir("/path/to/change/to")
Übrigens, wenn Sie Ihren aktuellen Pfad herausfinden wollen, verwenden Sie os.getcwd()
.
Mehr aquí
Wenn Sie eine relativ neue Version von Python verwenden, können Sie auch einen Kontextmanager verwenden, wie z.B. diese :
from __future__ import with_statement
from grizzled.os import working_directory
with working_directory(path_to_directory):
# code in here occurs within the directory
# code here is in the original directory
UPDATE
Wenn Sie es vorziehen, Ihre eigene Rolle zu drehen:
import os
from contextlib import contextmanager
@contextmanager
def working_directory(directory):
owd = os.getcwd()
try:
os.chdir(directory)
yield directory
finally:
os.chdir(owd)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.