mirror of
https://github.com/python/cpython.git
synced 2025-09-09 02:11:51 +00:00
Issue #13854: Properly handle non-integer, non-string arg to SystemExit
Previously multiprocessing only expected int or str. It also wrongly used an exit code of 1 when the argument was a string instead of zero.
This commit is contained in:
parent
e41682b994
commit
29471de459
3 changed files with 36 additions and 3 deletions
|
@ -390,6 +390,36 @@ class _TestSubclassingProcess(BaseTestCase):
|
|||
1/0 # MARKER
|
||||
|
||||
|
||||
@classmethod
|
||||
def _test_sys_exit(cls, reason, testfn):
|
||||
sys.stderr = open(testfn, 'w')
|
||||
sys.exit(reason)
|
||||
|
||||
def test_sys_exit(self):
|
||||
# See Issue 13854
|
||||
if self.TYPE == 'threads':
|
||||
return
|
||||
|
||||
testfn = test.support.TESTFN
|
||||
self.addCleanup(test.support.unlink, testfn)
|
||||
|
||||
for reason, code in (([1, 2, 3], 1), ('ignore this', 0)):
|
||||
p = self.Process(target=self._test_sys_exit, args=(reason, testfn))
|
||||
p.daemon = True
|
||||
p.start()
|
||||
p.join(5)
|
||||
self.assertEqual(p.exitcode, code)
|
||||
|
||||
with open(testfn, 'r') as f:
|
||||
self.assertEqual(f.read().rstrip(), str(reason))
|
||||
|
||||
for reason in (True, False, 8):
|
||||
p = self.Process(target=sys.exit, args=(reason,))
|
||||
p.daemon = True
|
||||
p.start()
|
||||
p.join(5)
|
||||
self.assertEqual(p.exitcode, reason)
|
||||
|
||||
#
|
||||
#
|
||||
#
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue