1import os 2import signal 3import subprocess 4import sys 5import unittest 6 7from test import support 8from test.support import script_helper 9 10 11@unittest.skipUnless(os.name == "posix", "only supported on Unix") 12class EINTRTests(unittest.TestCase): 13 14 @unittest.skipUnless(hasattr(signal, "setitimer"), "requires setitimer()") 15 def test_all(self): 16 # Run the tester in a sub-process, to make sure there is only one 17 # thread (for reliable signal delivery). 18 tester = support.findfile("eintr_tester.py", subdir="eintrdata") 19 # use -u to try to get the full output if the test hangs or crash 20 args = ["-u", tester, "-v"] 21 if support.verbose: 22 print() 23 print("--- run eintr_tester.py ---", flush=True) 24 # In verbose mode, the child process inherit stdout and stdout, 25 # to see output in realtime and reduce the risk of losing output. 26 args = [sys.executable, "-E", "-X", "faulthandler", *args] 27 proc = subprocess.run(args) 28 print(f"--- eintr_tester.py completed: " 29 f"exit code {proc.returncode} ---", flush=True) 30 if proc.returncode: 31 self.fail("eintr_tester.py failed") 32 else: 33 script_helper.assert_python_ok("-u", tester, "-v") 34 35 36if __name__ == "__main__": 37 unittest.main() 38