Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value.

subprocess.Popen() and os._execvpe() support bytes program name. Add
os.supports_bytes_environ flag: True if the native OS type of the environment
is bytes (eg. False on Windows).
This commit is contained in:
Victor Stinner 2010-05-18 17:17:23 +00:00
parent 04b5684d00
commit b745a74c99
6 changed files with 129 additions and 22 deletions

View file

@ -1096,15 +1096,14 @@ class Popen(object):
for k, v in env.items()]
else:
env_list = None # Use execv instead of execve.
executable = os.fsencode(executable)
if os.path.dirname(executable):
executable_list = (os.fsencode(executable),)
executable_list = (executable,)
else:
# This matches the behavior of os._execvpe().
path_list = os.get_exec_path(env)
executable_list = (os.path.join(dir, executable)
for dir in path_list)
executable_list = tuple(os.fsencode(exe)
for exe in executable_list)
executable_list = tuple(
os.path.join(os.fsencode(dir), executable)
for dir in os.get_exec_path(env))
self.pid = _posixsubprocess.fork_exec(
args, executable_list,
close_fds, cwd, env_list,