mirror of
https://github.com/python/cpython.git
synced 2025-10-15 03:10:29 +00:00
Fixes Issue #16114: The subprocess module no longer provides a
misleading error message stating that args[0] did not exist when either the cwd or executable keyword arguments specified a path that did not exist.
This commit is contained in:
commit
a10ddb8a55
4 changed files with 59 additions and 9 deletions
|
@ -1038,24 +1038,30 @@ class _SuppressCoreFiles(object):
|
|||
@unittest.skipIf(mswindows, "POSIX specific tests")
|
||||
class POSIXProcessTestCase(BaseTestCase):
|
||||
|
||||
def test_exceptions(self):
|
||||
nonexistent_dir = "/_this/pa.th/does/not/exist"
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self._nonexistent_dir = "/_this/pa.th/does/not/exist"
|
||||
|
||||
def _get_chdir_exception(self):
|
||||
try:
|
||||
os.chdir(nonexistent_dir)
|
||||
os.chdir(self._nonexistent_dir)
|
||||
except OSError as e:
|
||||
# This avoids hard coding the errno value or the OS perror()
|
||||
# string and instead capture the exception that we want to see
|
||||
# below for comparison.
|
||||
desired_exception = e
|
||||
desired_exception.strerror += ': ' + repr(sys.executable)
|
||||
desired_exception.strerror += ': ' + repr(self._nonexistent_dir)
|
||||
else:
|
||||
self.fail("chdir to nonexistant directory %s succeeded." %
|
||||
nonexistent_dir)
|
||||
self._nonexistent_dir)
|
||||
return desired_exception
|
||||
|
||||
# Error in the child re-raised in the parent.
|
||||
def test_exception_cwd(self):
|
||||
"""Test error in the child raised in the parent for a bad cwd."""
|
||||
desired_exception = self._get_chdir_exception()
|
||||
try:
|
||||
p = subprocess.Popen([sys.executable, "-c", ""],
|
||||
cwd=nonexistent_dir)
|
||||
cwd=self._nonexistent_dir)
|
||||
except OSError as e:
|
||||
# Test that the child process chdir failure actually makes
|
||||
# it up to the parent process as the correct exception.
|
||||
|
@ -1064,6 +1070,33 @@ class POSIXProcessTestCase(BaseTestCase):
|
|||
else:
|
||||
self.fail("Expected OSError: %s" % desired_exception)
|
||||
|
||||
def test_exception_bad_executable(self):
|
||||
"""Test error in the child raised in the parent for a bad executable."""
|
||||
desired_exception = self._get_chdir_exception()
|
||||
try:
|
||||
p = subprocess.Popen([sys.executable, "-c", ""],
|
||||
executable=self._nonexistent_dir)
|
||||
except OSError as e:
|
||||
# Test that the child process exec failure actually makes
|
||||
# it up to the parent process as the correct exception.
|
||||
self.assertEqual(desired_exception.errno, e.errno)
|
||||
self.assertEqual(desired_exception.strerror, e.strerror)
|
||||
else:
|
||||
self.fail("Expected OSError: %s" % desired_exception)
|
||||
|
||||
def test_exception_bad_args_0(self):
|
||||
"""Test error in the child raised in the parent for a bad args[0]."""
|
||||
desired_exception = self._get_chdir_exception()
|
||||
try:
|
||||
p = subprocess.Popen([self._nonexistent_dir, "-c", ""])
|
||||
except OSError as e:
|
||||
# Test that the child process exec failure actually makes
|
||||
# it up to the parent process as the correct exception.
|
||||
self.assertEqual(desired_exception.errno, e.errno)
|
||||
self.assertEqual(desired_exception.strerror, e.strerror)
|
||||
else:
|
||||
self.fail("Expected OSError: %s" % desired_exception)
|
||||
|
||||
def test_restore_signals(self):
|
||||
# Code coverage for both values of restore_signals to make sure it
|
||||
# at least does not blow up.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue