mirror of
https://github.com/python/cpython.git
synced 2025-08-30 13:38:43 +00:00
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().
This commit is contained in:
parent
9a81697494
commit
b6e8c7e8fb
4 changed files with 52 additions and 10 deletions
27
Lib/os.py
27
Lib/os.py
|
@ -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)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue