diff --git a/Misc/NEWS b/Misc/NEWS index 536ea43ed5a..1a6d17ade1e 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -184,6 +184,9 @@ Core and Builtins Library ------- +- Issue #8412: os.system() now accepts bytes, bytearray and str with + surrogates. + - Issue #4282: Fix the main function of the profile module for a non-ASCII script, open the file in binary mode and not in text mode with the default (utf8) encoding. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 502bf62a27d..bba75aff486 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2814,18 +2814,23 @@ posix_system(PyObject *self, PyObject *args) wchar_t *command; if (!PyArg_ParseTuple(args, "u:system", &command)) return NULL; -#else - char *command; - if (!PyArg_ParseTuple(args, "s:system", &command)) - return NULL; -#endif + Py_BEGIN_ALLOW_THREADS -#ifdef MS_WINDOWS sts = _wsystem(command); -#else - sts = system(command); -#endif Py_END_ALLOW_THREADS +#else + PyObject *command_obj; + char *command; + if (!PyArg_ParseTuple(args, "O&:system", + PyUnicode_FSConverter, &command_obj)) + return NULL; + + command = bytes2str(command_obj, 1); + Py_BEGIN_ALLOW_THREADS + sts = system(command); + Py_END_ALLOW_THREADS + release_bytes(command_obj); +#endif return PyLong_FromLong(sts); } #endif