diff options
author | Gregory P. Smith <greg@mad-scientist.com> | 2010-02-27 07:22:22 (GMT) |
---|---|---|
committer | Gregory P. Smith <greg@mad-scientist.com> | 2010-02-27 07:22:22 (GMT) |
commit | b6e8c7e8fb750e44b387557ad19afe2ccfe69f7c (patch) | |
tree | 25e5b445c8d511dc4c18f3c40196f69674577cdf /Lib/os.py | |
parent | 9a816974942a170a082bcef01a11aca806e854fe (diff) | |
download | cpython-b6e8c7e8fb750e44b387557ad19afe2ccfe69f7c.zip cpython-b6e8c7e8fb750e44b387557ad19afe2ccfe69f7c.tar.gz cpython-b6e8c7e8fb750e44b387557ad19afe2ccfe69f7c.tar.bz2 |
Add an os.get_exec_path() function to return the list of directories
that launching a subprocess will search for the executable.
Refactors some code in os._execvpe().
Diffstat (limited to 'Lib/os.py')
-rw-r--r-- | Lib/os.py | 27 |
1 files changed, 17 insertions, 10 deletions
@@ -342,28 +342,23 @@ __all__.extend(["execl","execle","execlp","execlpe","execvp","execvpe"]) def _execvpe(file, args, env=None): if env is not None: - func = execve + exec_func = execve argrest = (args, env) else: - func = execv + exec_func = execv argrest = (args,) env = environ head, tail = path.split(file) if head: - func(file, *argrest) + exec_func(file, *argrest) return - if 'PATH' in env: - envpath = env['PATH'] - else: - envpath = defpath - PATH = envpath.split(pathsep) last_exc = saved_exc = None saved_tb = None - for dir in PATH: + for dir in get_exec_path(env): fullname = path.join(dir, file) try: - func(fullname, *argrest) + exec_func(fullname, *argrest) except error as e: last_exc = e tb = sys.exc_info()[2] @@ -376,6 +371,18 @@ def _execvpe(file, args, env=None): raise last_exc.with_traceback(tb) +def get_exec_path(env=None): + """Returns the sequence of directories that will be searched for the + named executable (similar to a shell) when launching a process. + + *env* must be an environment variable dict or None. If *env* is None, + os.environ will be used. + """ + if env is None: + env = environ + return env.get('PATH', defpath).split(pathsep) + + # Change environ to automatically call putenv(), unsetenv if they exist. from _abcoll import MutableMapping # Can't use collections (bootstrap) |