Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Lib/shutil.py
Original file line number Diff line number Diff line change
Expand Up @@ -1415,7 +1415,7 @@ 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 = [ext for ext in os.environ.get("PATHEXT", "").split(os.pathsep) if ext]
Comment thread
peanutlord marked this conversation as resolved.
Outdated
if use_bytes:
pathext = [os.fsencode(ext) for ext in pathext]
# See if the given file matches any of the expected path extensions.
Expand Down
17 changes: 17 additions & 0 deletions Lib/test/test_shutil.py
Original file line number Diff line number Diff line change
Expand Up @@ -1848,6 +1848,23 @@ def test_pathext(self):
rv = shutil.which(program, path=self.temp_dir)
self.assertEqual(rv, temp_filexyz.name)

@unittest.skipUnless(sys.platform == "win32", 'test specific to Windows')
def test_pathext_with_empty_str(self):
Comment thread
peanutlord marked this conversation as resolved.
ext = ".xyz"
temp_filexyz = tempfile.NamedTemporaryFile(dir=self.temp_dir,
prefix="Tmp2", suffix=ext)
os.chmod(temp_filexyz.name, stat.S_IXUSR)
Comment thread
peanutlord marked this conversation as resolved.
Outdated
self.addCleanup(temp_filexyz.close)

# strip path and extension
program = os.path.basename(temp_filexyz.name)
program = os.path.splitext(program)[0]

with support.EnvironmentVarGuard() as env:
env['PATHEXT'] = f"{ext};" # note the ;
rv = shutil.which(program, path=self.temp_dir)
self.assertEqual(rv, temp_filexyz.name)


class TestWhichBytes(TestWhich):
def setUp(self):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
shutil.which returns not None anymore with ; at the end of PATHEXT
Comment thread
peanutlord marked this conversation as resolved.
Outdated