summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2006-04-03 10:56:49 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2006-04-03 10:56:49 (GMT)
commitea62d2535f6160d5b4306ea060f5da05cfa7e9ab (patch)
treed3ce394a4d53a281d208995811397a247bb764d6
parentcf0a2a8576b4780263cfeb96d081eea06a1ebe92 (diff)
downloadcpython-ea62d2535f6160d5b4306ea060f5da05cfa7e9ab.zip
cpython-ea62d2535f6160d5b4306ea060f5da05cfa7e9ab.tar.gz
cpython-ea62d2535f6160d5b4306ea060f5da05cfa7e9ab.tar.bz2
Bug #1421664: Set sys.stderr.encoding
-rw-r--r--Misc/NEWS3
-rw-r--r--Python/pythonrun.c10
-rw-r--r--Python/sysmodule.c5
3 files changed, 18 insertions, 0 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index cb99814..70ed7ca 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 4c8c517..1aa6930 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 dfa6ac8..4a52742 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);