aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Marchfelder <marchfelder@googlemail.com>2020-10-23 12:08:24 +0200
committerGitHub <noreply@github.com>2020-10-23 11:08:24 +0100
commitda6f098188c9825f10ae60db8987056b3a54c2e8 (patch)
tree12fd534f1159492f1194c1fb14fe8c5ec20cdae2 /Lib/shutil.py
parentbpo-36876: Fix the C analyzer tool. (GH-22841) (diff)
downloadcpython-da6f098188c9825f10ae60db8987056b3a54c2e8.tar.gz
cpython-da6f098188c9825f10ae60db8987056b3a54c2e8.tar.bz2
cpython-da6f098188c9825f10ae60db8987056b3a54c2e8.zip
bpo-40592: shutil.which will not return None anymore if ; is the last char in PATHEXT (GH-20088)
shutil.which will not return None anymore for empty str in PATHEXT Empty PATHEXT will now be defaulted to _WIN_DEFAULT_PATHEXT
Diffstat (limited to 'Lib/shutil.py')
-rw-r--r--Lib/shutil.py7
1 files changed, 6 insertions, 1 deletions
diff --git a/Lib/shutil.py b/Lib/shutil.py
index a4ce2c0290b..223e9a8a705 100644
--- a/Lib/shutil.py
+++ b/Lib/shutil.py
@@ -53,6 +53,9 @@ COPY_BUFSIZE = 1024 * 1024 if _WINDOWS else 64 * 1024
_USE_CP_SENDFILE = hasattr(os, "sendfile") and sys.platform.startswith("linux")
_HAS_FCOPYFILE = posix and hasattr(posix, "_fcopyfile") # macOS
+# CMD defaults in Windows 10
+_WIN_DEFAULT_PATHEXT = ".COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC"
+
__all__ = ["copyfileobj", "copyfile", "copymode", "copystat", "copy", "copy2",
"copytree", "move", "rmtree", "Error", "SpecialFileError",
"ExecError", "make_archive", "get_archive_formats",
@@ -1415,7 +1418,9 @@ def which(cmd, mode=os.F_OK | os.X_OK, path=None):
path.insert(0, curdir)
# PATHEXT is necessary to check on Windows.
- pathext = os.environ.get("PATHEXT", "").split(os.pathsep)
+ pathext_source = os.getenv("PATHEXT") or _WIN_DEFAULT_PATHEXT
+ pathext = [ext for ext in pathext_source.split(os.pathsep) if ext]
+
if use_bytes:
pathext = [os.fsencode(ext) for ext in pathext]
# See if the given file matches any of the expected path extensions.