[Python-ideas] Replacing the standard IO streams (was Re: changing sys.stdout encoding)
Paul Moore
p.f.moore at gmail.com
Sun Jun 10 22:38:14 CEST 2012
On 10 June 2012 21:28, MRAB <python at mrabarnett.plus.com> wrote:
> On 10/06/2012 21:07, Paul Moore wrote:
>>
>> On 10 June 2012 20:01, MRAB<python at mrabarnett.plus.com> wrote:
>>>
>>> On 10/06/2012 19:34, Paul Moore wrote:
>>>>
>>>>
>>>> On 10 June 2012 19:12, MRAB<python at mrabarnett.plus.com> wrote:
>>>>>
>>>>>
>>>>> On 10/06/2012 17:41, Stephen J. Turnbull wrote:
>>>>>>
>>>>>>
>>>>>> I am a little concerned with MRAB's report that
>>>>>>
>>>>>> import sys
>>>>>> print("hello")
>>>>>> sys.stdout.flush()
>>>>>> sys.stdout = open(sys.stdout.fileno(), 'w', encoding='utf-8')
>>>>>> print("hello")
>>>>>>
>>>>>> doesn't work as expected, though. (It does work for me on Mac OS X,
>>>>>> both as above -- of course there are no '\r's in the output -- and
>>>>>> with 'print("hello", end="\r\n")'.)
>>>>>>
>>>>> That's actually Python 3.1. From Python 3.2 it's slightly different,
>>>>> but still not quite right:
>>>>>
>>>>> Python 3.1: "hello\r\nhello\r\r\n"
>>>>> Python 3.2: "hello\nhello\r\n"
>>>>> Python 3.3.0a4: "hello\nhello\r\n"
>>>>>
>>>>> All on Windows.
>>>>
>>>>
>>>>
>>>> Not here (Win 7 32-bit):
>>>>
>>>> PS D:\Data> type t.py
>>>> import sys
>>>> print("Hello!")
>>>> sys.stdout.flush()
>>>>
>>>> sys.stdout = open(sys.stdout.fileno(), 'w', encoding='utf-8')
>>>> print("Hello!")
>>>> PS D:\Data> py -3.2 t.py | od -c
>>>> 0000000 H e l l o ! \r \n H e l l o ! \r \n
>>>> 0000020
>>>>
>>> I'm using Windows XP Pro (32-bit), initially sys.stdout.encoding ==
>>> "cp1252".
>>
>>
>> PS D:\Data> py -3 -c "import sys; print(sys.stdout.encoding)"
>> cp850
>>
>> This is at the console (Powershell) - are you running from within
>> something like idle, or a GUI environment?
>>
> It's at the system command prompt. When I redirect the script's stdout to a
> file
> (on the command line using ">output.txt") I get those 15 bytes from Python
> 3.2.
>
> Your output appears to be 32 bytes (the second line starts with
> "0000020").
Well spotted - PowerShell does funny things with Unicode in pipes, I'd
forgotten. Indeed, I get the same output as you from cmd.
Odd.
Paul
More information about the Python-ideas
mailing list