mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
bpo-40094: Add os.waitstatus_to_exitcode() (GH-19201)
Add os.waitstatus_to_exitcode() function to convert a wait status to an exitcode. Suggest waitstatus_to_exitcode() usage in the documentation when appropriate. Use waitstatus_to_exitcode() in: * multiprocessing, os, subprocess and _bootsubprocess modules; * test.support.wait_process(); * setup.py: run_command(); * and many tests.
This commit is contained in:
parent
5dd836030e
commit
65a796e527
18 changed files with 258 additions and 61 deletions
|
@ -2794,6 +2794,35 @@ class PidTests(unittest.TestCase):
|
|||
pid = os.spawnv(os.P_NOWAIT, FakePath(args[0]), args)
|
||||
support.wait_process(pid, exitcode=0)
|
||||
|
||||
def test_waitstatus_to_exitcode(self):
|
||||
exitcode = 23
|
||||
filename = support.TESTFN
|
||||
self.addCleanup(support.unlink, filename)
|
||||
|
||||
with open(filename, "w") as fp:
|
||||
print(f'import sys; sys.exit({exitcode})', file=fp)
|
||||
fp.flush()
|
||||
args = [sys.executable, filename]
|
||||
pid = os.spawnv(os.P_NOWAIT, args[0], args)
|
||||
|
||||
pid2, status = os.waitpid(pid, 0)
|
||||
self.assertEqual(os.waitstatus_to_exitcode(status), exitcode)
|
||||
self.assertEqual(pid2, pid)
|
||||
|
||||
# Skip the test on Windows
|
||||
@unittest.skipUnless(hasattr(signal, 'SIGKILL'), 'need signal.SIGKILL')
|
||||
def test_waitstatus_to_exitcode_kill(self):
|
||||
signum = signal.SIGKILL
|
||||
args = [sys.executable, '-c',
|
||||
f'import time; time.sleep({support.LONG_TIMEOUT})']
|
||||
pid = os.spawnv(os.P_NOWAIT, args[0], args)
|
||||
|
||||
os.kill(pid, signum)
|
||||
|
||||
pid2, status = os.waitpid(pid, 0)
|
||||
self.assertEqual(os.waitstatus_to_exitcode(status), -signum)
|
||||
self.assertEqual(pid2, pid)
|
||||
|
||||
|
||||
class SpawnTests(unittest.TestCase):
|
||||
def create_args(self, *, with_env=False, use_bytes=False):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue