diff -r 4646b64139c9 Parser/myreadline.c --- a/Parser/myreadline.c Fri Oct 07 23:46:22 2016 +0300 +++ b/Parser/myreadline.c Sat Oct 08 00:23:32 2016 +0000 @@ -203,16 +203,36 @@ #ifdef MS_WINDOWS if (!Py_LegacyWindowsStdioFlag && sys_stdin == stdin) { - HANDLE hStdIn; + HANDLE hStdIn, hStdErr; _Py_BEGIN_SUPPRESS_IPH hStdIn = (HANDLE)_get_osfhandle(fileno(sys_stdin)); + hStdErr = (HANDLE)_get_osfhandle(fileno(stderr)); _Py_END_SUPPRESS_IPH if (_get_console_type(hStdIn) == 'r') { fflush(sys_stdout); - if (prompt) - fprintf(stderr, "%s", prompt); + if (prompt) { + if (_get_console_type(hStdErr) == 'w') { + wchar_t *wbuf; + int wlen, len = (int)strlen(prompt); + wlen = MultiByteToWideChar(CP_UTF8, 0, prompt, len, + NULL, 0); + wbuf = PyMem_RawMalloc(wlen * sizeof(wchar_t)); + if (wbuf) { + wlen = MultiByteToWideChar(CP_UTF8, 0, prompt, len, + wbuf, wlen); + if (wlen) { + DWORD n; + fflush(stderr); + WriteConsoleW(hStdErr, wbuf, wlen, &n, NULL); + } + PyMem_RawFree(wbuf); + } + } else { + fprintf(stderr, "%s", prompt); + } + } fflush(stderr); clearerr(sys_stdin); return _PyOS_WindowsConsoleReadline(hStdIn);