Python Glossary English

Python 3.11+contextlibпонятие

contextlib.chdir

менеджеры

Контекстный менеджер: временно меняет текущий рабочий каталог, восстанавливая его на выходе (Python 3.11+).

Синтаксис

with contextlib.chdir(path): ...

Меняется рабочий каталог всего процесса, а не отдельного потока, поэтому в многопоточном или асинхронном коде соседние потоки и задачи внезапно увидят чужой каталог — документация прямо отмечает, что менеджер не потокобезопасен. Вложенность при этом безопасна: он реентерабельный и запоминает предыдущий каталог на каждом входе. В обычном коде надёжнее просто складывать абсолютные пути, а chdir беречь для случаев, когда чужая библиотека умеет работать только с текущим каталогом.

Примеры

import contextlib
import os
cm = contextlib.chdir('.')
print(hasattr(cm, '__enter__') and hasattr(cm, '__exit__'))   # → True
with contextlib.chdir('.') as v: print(v)   # → None
before = os.getcwd()
with contextlib.chdir('..'): print(os.getcwd() == os.path.dirname(before))   # → True
print(os.getcwd() == before)   # → True
with contextlib.chdir('no_such_dir'): pass   # → FileNotFoundError

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности