pushd through os.system

In Python 2.5 and later, I think a better method would be using a context manager, like so:

import contextlib
import os


@contextlib.contextmanager
def pushd(new_dir):
    previous_dir = os.getcwd()
    os.chdir(new_dir)
    try:
        yield
    finally:
        os.chdir(previous_dir)

You can then use it like the following:

with pushd('somewhere'):
    print os.getcwd() # "somewhere"

print os.getcwd() # "wherever you started"

By using a context manager you will be exception and return value safe: your code will always cd back to where it started from, even if you throw an exception or return from inside the context block.

You can also nest pushd calls in nested blocks, without having to rely on a global directory stack:

with pushd('somewhere'):
    # do something
    with pushd('another/place'):
        # do something else
    # do something back in "somewhere"

Each shell command runs in a separate process. It spawns a shell, executes the pushd command, and then the shell exits.

Just write the commands in the same shell script:

os.system("cd /directory/path/here; run the commands")

A nicer (perhaps) way is with the subprocess module:

from subprocess import Popen
Popen("run the commands", shell=True, cwd="/directory/path/here")