bpo-34485: Emit C locale coercion warning later (GH-9002)
PYTHONCOERCELOCALE=warn warning is now emitted later and written into
sys.stderr, rather than being written into the C stderr stream.
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 6d97f2f..ad55b2c 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -301,10 +301,8 @@
static void
_emit_stderr_warning_for_legacy_locale(const _PyCoreConfig *core_config)
{
- if (core_config->coerce_c_locale_warn) {
- if (_Py_LegacyLocaleDetected()) {
- fprintf(stderr, "%s", _C_LOCALE_WARNING);
- }
+ if (core_config->coerce_c_locale_warn && _Py_LegacyLocaleDetected()) {
+ PySys_FormatStderr("%s", _C_LOCALE_WARNING);
}
}
@@ -567,10 +565,6 @@
*/
_PyRuntime.finalizing = NULL;
-#ifndef MS_WINDOWS
- _emit_stderr_warning_for_legacy_locale(core_config);
-#endif
-
err = _Py_HashRandomization_Init(core_config);
if (_Py_INIT_FAILED(err)) {
return err;
@@ -867,6 +861,11 @@
return err;
}
}
+
+#ifndef MS_WINDOWS
+ _emit_stderr_warning_for_legacy_locale(core_config);
+#endif
+
return _Py_INIT_OK();
}