본문 바로가기

프로그래밍/Python

[Python] with 컨텍스트를 이용해서 다른 디렉토리에서 작업하고 오기.

728x90

ref : https://stackoverflow.com/questions/299446/how-do-i-change-directory-back-to-my-original-working-directory-with-python

컨텍스트 매니저 함수를 다음과 같이 정의하고,

from contextlib import contextmanager

@contextmanager
def cwd(path):
    oldpwd=os.getcwd()
    os.chdir(path)
    try:
        yield
    finally:
        os.chdir(oldpwd)

다음과 같이 쓰면 된다.

print('current dir = `%s`'%(os.getcwd())
with cwd('./subdir'):
    # 여기서 하고 싶은 일들을 한다.
    # 예를 들면, 중간 출력 파일들을 파일명만으로 만든다던가.
    # 특정 디렉토리에 있는 실행파일을 파일명만으로 실행한다던가.
    print('current dir = `%s`'%(os.getcwd())
print('current dir = `%s`'%(os.getcwd())

with 컨텍스트 블록에 진입하면서, 프로그램의 현재디렉토리가 subdir 로 바뀌고, 그 안에서 하고 싶은 짓을 하면 된다. with 블록을 나가면, context manager 가 알아서 "자동으로", 원래의 디렉토리로 현재디렉토리를 바꾸어준다.

수동으로 원래 디렉토리로 chdir 해주는 방법도 있지만, 실수할 소지가 다분하기 때문에, 여러번 디렉토리를 옮겨다니며 작업하거나 하는 경우 유용한 팁이다.