'cd' is not a program that can be started in a separated process, True, but unless something highly unusual is being done, popen("command") runs sh -c "command", not a direct exec(2) or similar. (On Unix. Windows is different, obviously.) So shell builtins can be passed. Same with os.execute -> system(3). --karl