summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/shutil.py6
-rw-r--r--Lib/test/test_shutil.py21
2 files changed, 26 insertions, 1 deletions
diff --git a/Lib/shutil.py b/Lib/shutil.py
index a188408..3904f43 100644
--- a/Lib/shutil.py
+++ b/Lib/shutil.py
@@ -1091,7 +1091,11 @@ def which(cmd, mode=os.F_OK | os.X_OK, path=None):
return cmd
return None
- path = (path or os.environ.get("PATH", os.defpath)).split(os.pathsep)
+ if path is None:
+ path = os.environ.get("PATH", os.defpath)
+ if not path:
+ return None
+ path = path.split(os.pathsep)
if sys.platform == "win32":
# The current directory takes precedence on Windows.
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
index 3b1b694..a3e3a52 100644
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -24,6 +24,7 @@ import warnings
from test import support
from test.support import TESTFN, check_warnings, captured_stdout, requires_zlib
+from unittest.mock import patch
try:
import bz2
@@ -1352,6 +1353,26 @@ class TestWhich(unittest.TestCase):
rv = shutil.which(self.file[:-4], path=self.dir)
self.assertEqual(rv, self.temp_file.name[:-4] + ".EXE")
+ def test_environ_path(self):
+ with support.EnvironmentVarGuard() as env:
+ env['PATH'] = self.dir
+ rv = shutil.which(self.file)
+ self.assertEqual(rv, self.temp_file.name)
+
+ def test_empty_path(self):
+ base_dir = os.path.dirname(self.dir)
+ with support.temp_cwd(path=self.dir), \
+ support.EnvironmentVarGuard() as env:
+ env['PATH'] = self.dir
+ rv = shutil.which(self.file, path='')
+ self.assertIsNone(rv)
+
+ def test_empty_path_no_PATH(self):
+ with support.EnvironmentVarGuard() as env:
+ env.pop('PATH', None)
+ rv = shutil.which(self.file)
+ self.assertIsNone(rv)
+
class TestMove(unittest.TestCase):