Kaydet (Commit) 6999441d authored tarafından Antoine Pitrou's avatar Antoine Pitrou

Issue #20355: -W command line options now have higher priority than the…

Issue #20355: -W command line options now have higher priority than the PYTHONWARNINGS environment variable.  Patch by Arfrever.
üst 7fae75a4
......@@ -5,7 +5,7 @@ from io import StringIO
import sys
import unittest
from test import support
from test.script_helper import assert_python_ok
from test.script_helper import assert_python_ok, assert_python_failure
from test import warning_tests
......@@ -748,7 +748,19 @@ class EnvironmentVariableTests(BaseTest):
"import sys; sys.stdout.write(str(sys.warnoptions))",
PYTHONWARNINGS="ignore::DeprecationWarning")
self.assertEqual(stdout,
b"['ignore::UnicodeWarning', 'ignore::DeprecationWarning']")
b"['ignore::DeprecationWarning', 'ignore::UnicodeWarning']")
def test_conflicting_envvar_and_command_line(self):
rc, stdout, stderr = assert_python_failure("-Werror::DeprecationWarning", "-c",
"import sys, warnings; sys.stdout.write(str(sys.warnoptions)); "
"warnings.warn('Message', DeprecationWarning)",
PYTHONWARNINGS="default::DeprecationWarning")
self.assertEqual(stdout,
b"['default::DeprecationWarning', 'error::DeprecationWarning']")
self.assertEqual(stderr.splitlines(),
[b"Traceback (most recent call last):",
b" File \"<string>\", line 1, in <module>",
b"DeprecationWarning: Message"])
@unittest.skipUnless(sys.getfilesystemencoding() != 'ascii',
'requires non-ascii filesystemencoding')
......
......@@ -10,6 +10,9 @@ Release date: TBA
Core and Builtins
-----------------
- Issue #20355: -W command line options now have higher priority than the
PYTHONWARNINGS environment variable. Patch by Arfrever.
- Issue #21274: Define PATH_MAX for GNU/Hurd in Python/pythonrun.c.
- Issue #20904: Support setting FPU precision on m68k.
......
......@@ -343,6 +343,8 @@ Py_Main(int argc, wchar_t **argv)
int version = 0;
int saw_unbuffered_flag = 0;
PyCompilerFlags cf;
PyObject *warning_option = NULL;
PyObject *warning_options = NULL;
cf.cf_flags = 0;
......@@ -465,7 +467,15 @@ Py_Main(int argc, wchar_t **argv)
break;
case 'W':
PySys_AddWarnOption(_PyOS_optarg);
if (warning_options == NULL)
warning_options = PyList_New(0);
if (warning_options == NULL)
Py_FatalError("failure in handling of -W argument");
warning_option = PyUnicode_FromWideChar(_PyOS_optarg, -1);
if (warning_option == NULL)
Py_FatalError("failure in handling of -W argument");
PyList_Append(warning_options, warning_option);
Py_DECREF(warning_option);
break;
case 'X':
......@@ -559,6 +569,12 @@ Py_Main(int argc, wchar_t **argv)
PyMem_RawFree(buf);
}
#endif
if (warning_options != NULL) {
Py_ssize_t i;
for (i = 0; i < PyList_GET_SIZE(warning_options); i++) {
PySys_AddWarnOptionUnicode(PyList_GET_ITEM(warning_options, i));
}
}
if (command == NULL && module == NULL && _PyOS_optind < argc &&
wcscmp(argv[_PyOS_optind], L"-") != 0)
......@@ -652,6 +668,7 @@ Py_Main(int argc, wchar_t **argv)
Py_SetProgramName(argv[0]);
#endif
Py_Initialize();
Py_XDECREF(warning_options);
if (!Py_QuietFlag && (Py_VerboseFlag ||
(command == NULL && filename == NULL &&
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment