diff options
author | Victor Stinner <vstinner@redhat.com> | 2019-04-17 14:26:36 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-17 14:26:36 (GMT) |
commit | 228a3c99bdb2d02771bead66a0beabafad3a90d3 (patch) | |
tree | 40ff4e1063f1205ad1f32f9005ba3675531c19a4 /Lib/shutil.py | |
parent | 71ce03df9c643faa94fbdf73bbb4e99a9a62cbdc (diff) | |
download | cpython-228a3c99bdb2d02771bead66a0beabafad3a90d3.zip cpython-228a3c99bdb2d02771bead66a0beabafad3a90d3.tar.gz cpython-228a3c99bdb2d02771bead66a0beabafad3a90d3.tar.bz2 |
bpo-35755: shutil.which() uses os.confstr("CS_PATH") (GH-12858)
shutil.which() and distutils.spawn.find_executable() now use
os.confstr("CS_PATH") if available instead of os.defpath, if the PATH
environment variable is not set.
Don't use os.confstr("CS_PATH") nor os.defpath if the PATH
environment variable is set to an empty string to mimick Unix 'which'
command behavior.
Changes:
* find_executable() now starts by checking for the executable in the
current working directly case. Add an explicit
"if not path: return None".
* Add tests for PATH='' (empty string), PATH=':' and for PATHEXT.
Diffstat (limited to 'Lib/shutil.py')
-rw-r--r-- | Lib/shutil.py | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/Lib/shutil.py b/Lib/shutil.py index 7dd470d..34df9cc 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -1309,9 +1309,20 @@ def which(cmd, mode=os.F_OK | os.X_OK, path=None): use_bytes = isinstance(cmd, bytes) if path is None: - path = os.environ.get("PATH", os.defpath) + path = os.environ.get("PATH", None) + if path is None: + try: + path = os.confstr("CS_PATH") + except (AttributeError, ValueError): + # os.confstr() or CS_PATH is not available + path = os.defpath + # bpo-35755: Don't use os.defpath if the PATH environment variable is + # set to an empty string to mimick Unix which command behavior + + # PATH='' doesn't match, whereas PATH=':' looks in the current directory if not path: return None + if use_bytes: path = os.fsencode(path) path = path.split(os.fsencode(os.pathsep)) |