← retour aux snippets

contextlib: pushd (chdir temporaire) maison

Changer de dossier puis revenir automatiquement en sortie de bloc.

python context #contextlib#chdir#cwd

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.