diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2012-06-22 21:33:05 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2012-06-22 21:33:05 (GMT) |
commit | 07c24d13ed3902ed6d85e70602e3f77cca098b16 (patch) | |
tree | 5f624f9f268a890ab9ac6dd9ed18bf74ff66d610 /Lib | |
parent | 849349de05aef4de3ad1f3b5d8936b3fc79d4c84 (diff) | |
download | cpython-07c24d13ed3902ed6d85e70602e3f77cca098b16.zip cpython-07c24d13ed3902ed6d85e70602e3f77cca098b16.tar.gz cpython-07c24d13ed3902ed6d85e70602e3f77cca098b16.tar.bz2 |
Issue #444582: shutil.which() respects relative paths.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/shutil.py | 2 | ||||
-rw-r--r-- | Lib/test/test_shutil.py | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/Lib/shutil.py b/Lib/shutil.py index cb8d23f..8da46d1 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -1000,7 +1000,7 @@ def which(cmd, mode=os.F_OK | os.X_OK, path=None): seen = set() for dir in path: - dir = os.path.normcase(os.path.abspath(dir)) + dir = os.path.normcase(dir) if not dir in seen: seen.add(dir) for thefile in files: diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py index 96084ec..559f05b 100644 --- a/Lib/test/test_shutil.py +++ b/Lib/test/test_shutil.py @@ -1157,6 +1157,16 @@ class TestWhich(unittest.TestCase): rv = shutil.which(self.file, path=self.dir, mode=os.W_OK) self.assertIsNone(rv) + def test_relative(self): + old_cwd = os.getcwd() + base_dir, tail_dir = os.path.split(self.dir) + os.chdir(base_dir) + try: + rv = shutil.which(self.file, path=tail_dir) + self.assertEqual(rv, os.path.join(tail_dir, self.file)) + finally: + os.chdir(old_cwd) + def test_nonexistent_file(self): # Return None when no matching executable file is found on the path. rv = shutil.which("foo.exe", path=self.dir) |