]> granicus.if.org Git - python/commitdiff
Bug #1421664: Set sys.stderr.encoding
authorMartin v. Löwis <martin@v.loewis.de>
Mon, 3 Apr 2006 10:56:49 +0000 (10:56 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Mon, 3 Apr 2006 10:56:49 +0000 (10:56 +0000)
Misc/NEWS
Python/pythonrun.c
Python/sysmodule.c

index cb99814e04bef470fdf4383486f2c3ad4cd38a95..70ed7cacedcea88bde2966d6c209d534859d1d8f 100644 (file)
--- 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.
index 4c8c5176e526b69a0c94cb05dad3d4696ac5c625..1aa6930435a79ea9c5245e4bbdf624745a5a7c87 100644 (file)
@@ -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
index dfa6ac84d91f2aaa7d37b4fb3174a51a1c82b22c..4a527424c4a13bc7dedbf4961ef475c7a3377ad0 100644 (file)
@@ -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);