objectif
Changer de dossier puis revenir automatiquement en sortie de bloc.
code minimal
import os
from contextlib import contextmanager
@contextmanager
def pushd(path: str):
prev = os.getcwd()
try:
os.chdir(path); yield
finally:
os.chdir(prev)
import tempfile, pathlib
with tempfile.TemporaryDirectory() as tmp:
here = os.getcwd(); push = pathlib.Path(tmp)
with pushd(tmp):
print(os.getcwd() == str(push)) # attendu: True
print(os.getcwd() == here)
utilisation
import os, tempfile
from contextlib import contextmanager
@contextmanager
def pushd(p: str):
cur = os.getcwd()
try: os.chdir(p); yield
finally: os.chdir(cur)
with tempfile.TemporaryDirectory() as tmp:
with pushd(tmp):
print(os.path.basename(os.getcwd()) == os.path.basename(tmp))
variante(s) utile(s)
import os
print(isinstance(os.getcwd(), str))
notes
- Utile pour exécuter des outils qui supposent un cwd spécifique.
- Assurez-vous que le chemin existe avant d’entrer.