r'import sys; sys.exit("h\xe9")',
b"h\xe9", PYTHONIOENCODING='latin-1')
+ @support.requires_subprocess()
+ def test_exit_codes_under_repl(self):
+ # GH-129900: SystemExit, or things that raised it, didn't
+ # get their return code propagated by the REPL
+ import tempfile
+
+ exit_ways = [
+ "exit",
+ "__import__('sys').exit",
+ "raise SystemExit"
+ ]
+
+ for exitfunc in exit_ways:
+ for return_code in (0, 123):
+ with self.subTest(exitfunc=exitfunc, return_code=return_code):
+ with tempfile.TemporaryFile("w+") as stdin:
+ stdin.write(f"{exitfunc}({return_code})\n")
+ stdin.seek(0)
+ proc = subprocess.run([sys.executable], stdin=stdin)
+ self.assertEqual(proc.returncode, return_code)
+
def test_getdefaultencoding(self):
self.assertRaises(TypeError, sys.getdefaultencoding, 42)
# can't check more than the type, as the user might have changed it
int run = PyRun_AnyFileExFlags(stdin, "<stdin>", 0, &cf);
return (run != 0);
}
- int run = pymain_run_module(L"_pyrepl", 0);
- return (run != 0);
+ return pymain_run_module(L"_pyrepl", 0);
}