Вопрос-Ответ

Equivalent of shell 'cd' command to change the working directory?

Эквивалент команды shell 'cd' для изменения рабочего каталога?

cd это команда shell для изменения рабочего каталога.

Как мне изменить текущий рабочий каталог в Python?

Переведено автоматически
Ответ 1

Вы можете изменить рабочий каталог с помощью:

import os

os.chdir(path)

Вы должны быть осторожны, поскольку изменение каталога может привести к деструктивным изменениям, которые ваш код будет применять в новом расположении. Что еще хуже, не перехватывайте исключения, такие как WindowsError и OSError, после изменения каталога, поскольку это может означать, что деструктивные изменения применяются в старом расположении!

Если вы используете Python 3.11 или новее, рассмотрите возможность использования этого контекстного менеджера, чтобы убедиться, что вы вернетесь к исходному рабочему каталогу, когда закончите:

from contextlib import chdir

with chdir(path):
# do stuff here

Если вы используете более старую версию Python, ответ Брайана М. Ханта показывает, как запустить свой собственный контекстный менеджер: его ответ.

Изменение текущего рабочего каталога в подпроцессе не приводит к изменению текущего рабочего каталога в родительском процессе. Это верно и для интерпретатора Python. Вы не можете использовать os.chdir() для изменения CWD вызывающего процесса.

Ответ 2

Вот пример контекстного менеджера для изменения рабочего каталога. Это проще, чем версия ActiveState, упомянутая в другом месте, но эта работа выполняется.

Контекстный менеджер: 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)

Или попробуйте более краткий эквивалент (ниже), используя 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.
Ответ 3

cd() легко написать с помощью генератора и декоратора.

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)

Затем каталог восстанавливается даже после возникновения исключения:

os.chdir('/home')

with cd('/tmp'):
# ...
raise Exception("There's no place like /home.")
# Directory is now back to '/home'.
Ответ 4

Я бы использовал os.chdir вот так:

os.chdir("/path/to/change/to")

Кстати, если вам нужно определить свой текущий путь, используйте os.getcwd().

Подробнее здесь

python