This snippet defines a context to execute a block of statements in a different working directory (with the help of the with statement). After the block is exited, the initial working directory is restored, even if an exception has occurred in the with block.
A context to change current working directory.
# a context to change working directory
# tested with python 2.6 and 3.1. For 2.5, uncomment this:
# from __future__ import with_statement
from contextlib import contextmanager
import os
@contextmanager
def WorkingDirectory(dst_dir):
dst_dir = os.path.abspath(
os.path.normpath(
os.path.expanduser(
os.path.expandvars(dst_dir))))
current_dir = os.getcwd()
os.chdir(dst_dir)
try:
yield dst_dir
finally:
os.chdir(current_dir)
if __name__ == "__main__":
# test code
with WorkingDirectory(".."):
# code in this with block is executed with
# the parent dir as current working directory
print(os.getcwd())
# after the with block, we are back in the
# initial working directory. This is also
# true if an exception is raised inside the with block.
print(os.getcwd())
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.