From ea62d2535f6160d5b4306ea060f5da05cfa7e9ab Mon Sep 17 00:00:00 2001 From: =?utf8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Mon, 3 Apr 2006 10:56:49 +0000 Subject: [PATCH] Bug #1421664: Set sys.stderr.encoding --- Misc/NEWS | 3 +++ Python/pythonrun.c | 10 ++++++++++ Python/sysmodule.c | 5 +++++ 3 files changed, 18 insertions(+) diff --git a/Misc/NEWS b/Misc/NEWS index cb99814e04..70ed7caced 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 2.5 alpha 1? Core and builtins ----------------- +- Bug #1421664: sys.stderr.encoding is now set to the same value as + sys.stdout.encoding. + - __import__ accepts keyword arguments. - Patch #1460496: round() now accepts keyword arguments. diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 4c8c5176e5..1aa6930435 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -281,6 +281,16 @@ Py_InitializeEx(int install_sigs) } Py_XDECREF(sys_isatty); + sys_stream = PySys_GetObject("stderr"); + sys_isatty = PyObject_CallMethod(sys_stream, "isatty", ""); + if (!sys_isatty) + PyErr_Clear(); + if(sys_isatty && PyObject_IsTrue(sys_isatty)) { + if (!PyFile_SetEncoding(sys_stream, codeset)) + Py_FatalError("Cannot set codeset of stderr"); + } + Py_XDECREF(sys_isatty); + if (!Py_FileSystemDefaultEncoding) Py_FileSystemDefaultEncoding = codeset; else diff --git a/Python/sysmodule.c b/Python/sysmodule.c index dfa6ac84d9..4a527424c4 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -1069,6 +1069,11 @@ _PySys_Init(void) if (!PyFile_SetEncoding(sysout, buf)) return NULL; } + if(isatty(_fileno(stderr))) { + sprintf(buf, "cp%d", GetConsoleOutputCP()); + if (!PyFile_SetEncoding(syserr, buf)) + return NULL; + } #endif PyDict_SetItemString(sysdict, "stdin", sysin); -- 2.40.0