diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index b447e4253a8561..52482b82a97166 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -2409,6 +2409,26 @@ always available. Unless explicitly noted otherwise, all variables are read-only .. versionadded:: 3.2 +.. data:: EXIT_SUCCESS + + An int you can use to indicate your program ended gracefully. + + .. code-block:: python + + sys.exit(sys.EXIT_SUCCESS) + + .. versionadded:: 3.16 + +.. data:: EXIT_FAILURE + + An int you can use to indicate your program encountered an error. + + .. code-block:: python + + sys.exit(sys.EXIT_FAILURE) + + .. versionadded:: 3.16 + .. rubric:: Citations .. [C99] ISO/IEC 9899:1999. "Programming languages -- C." A public draft of this standard is available at https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf\ . diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index c74ca05ca66c9c..42e4a9ef71d3a9 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -265,6 +265,17 @@ def test_exit(self): self.assertEqual(out, b'') self.assertEqual(err, b'') + # test EXIT_SUCCESS and EXIT_FAILURE constants + self.assertNotEqual(sys.EXIT_SUCCESS, sys.EXIT_FAILURE) + rc, out, err = assert_python_ok('-c', 'import sys; sys.exit(sys.EXIT_SUCCESS)') + self.assertEqual(rc, sys.EXIT_SUCCESS) + self.assertEqual(out, b'') + self.assertEqual(err, b'') + rc, out, err = assert_python_failure('-c', 'import sys; sys.exit(sys.EXIT_FAILURE)') + self.assertEqual(rc, sys.EXIT_FAILURE) + self.assertEqual(out, b'') + self.assertEqual(err, b'') + def check_exit_message(code, expected, **env_vars): rc, out, err = assert_python_failure('-c', code, **env_vars) self.assertEqual(rc, 1) diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-07-14-12-40-19.bpo-24053.jVpLIJ.rst b/Misc/NEWS.d/next/Core and Builtins/2019-07-14-12-40-19.bpo-24053.jVpLIJ.rst new file mode 100644 index 00000000000000..3dd3e44d721078 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-07-14-12-40-19.bpo-24053.jVpLIJ.rst @@ -0,0 +1 @@ +Add EXIT_FAILURE and EXIT_SUCCESS in the sys module. diff --git a/Python/sysmodule.c b/Python/sysmodule.c index afc90d9bf5d7dd..f61ab0c7baceda 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -4329,6 +4329,9 @@ _PySys_Create(PyThreadState *tstate, PyObject **sysmod_p) PyUnstable_Module_SetGIL(sysmod, Py_MOD_GIL_NOT_USED); #endif + PyModule_AddIntMacro(sysmod, EXIT_SUCCESS); + PyModule_AddIntMacro(sysmod, EXIT_FAILURE); + PyObject *sysdict = PyModule_GetDict(sysmod); if (sysdict == NULL) { goto error;