(original) (raw)
Index: Python/sysmodule.c =================================================================== --- Python/sysmodule.c (révision 69105) +++ Python/sysmodule.c (copie de travail) @@ -70,7 +70,7 @@ static PyObject * sys_displayhook(PyObject *self, PyObject *o) { - PyObject *outf; + PyObject *outf, *ascii; PyInterpreterState *interp = PyThreadState_GET()->interp; PyObject *modules = interp->modules; PyObject *builtins = PyDict_GetItemString(modules, "builtins"); @@ -94,8 +94,12 @@ PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); return NULL; } - if (PyFile_WriteObject(o, outf, 0) != 0) + ascii = PyObject_ASCII(o); + if (ascii == NULL) return NULL; + if (PyFile_WriteObject(ascii, outf, Py_PRINT_RAW) != 0) + return NULL; + Py_DECREF(ascii); if (PyFile_WriteString("\n", outf) != 0) return NULL; if (PyObject_SetAttrString(builtins, "_", o) != 0) Index: Lib/test/test_sys.py =================================================================== --- Lib/test/test_sys.py (révision 69105) +++ Lib/test/test_sys.py (copie de travail) @@ -29,8 +29,11 @@ dh(None) self.assertEqual(out.getvalue(), "") self.assert_(not hasattr(builtins, "_")) + dh("\xff") + self.assertEqual(out.getvalue(), "'\\xff'\n") + self.assertEqual(builtins._, "\xff") dh(42) - self.assertEqual(out.getvalue(), "42\n") + self.assertEqual(out.getvalue(), "'\\xff'\n42\n") self.assertEqual(builtins._, 42) del sys.stdout