Unicode, stdout, and stderr

Frank Millman frank at chagford.com
Tue Jul 22 09:15:39 CEST 2014

"Steven D'Aprano" <steve at pearwood.info> wrote in message 
news:53ce0b96$0$29897$c3e8da3$5496439d at news.astraweb.com...
> On Tue, 22 Jul 2014 08:18:08 +0200, Frank Millman wrote:
>> Hi all
>> This is not important, but I would appreciate it if someone could
>> explain the following, run from cmd.exe on Windows Server 2003 -
>> C:\>python
>> Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:38:22) [MSC v.1600 32
>> bit (In
>> tel)] on win32
>> Type "help", "copyright", "credits" or "license" for more information.
>>>>> x = '\u2119'
>>>>> x  # this uses stderr
>> '\u2119'
> What makes you think it uses stderr? To the best of my knowledge, it uses
> stdout.

This is from the docs on sys.stdxxx


File objects used by the interpreter for standard input, output and errors:
  - stdin is used for all interactive input (including calls to input());
  - stdout is used for the output of print() and expression statements and 
for the prompts of input();
  - The interpreter's own prompts and its error messages go to stderr.

>> It seems that there is a difference between writing to stdout and
>> writing to stderr.
> I would be surprised if that were the case, but I don't have a Windows
> box to test it. Try this:
> import sys
> print(x, file=sys.stderr)  # I expect this will fail

It does not fail.

> print(repr(x), file=sys.stdout)  # I expect this will succeed

It fails.

The clue that led me to stderr is that the logging module displays unicode 
strings to the console without a problem. I delved into the source code, and 
found that it writes to stderr. When I changed mine to stderr, it also 


More information about the Python-list mailing list