[Python-ideas] changing sys.stdout encoding
python at mrabarnett.plus.com
Wed Jun 6 01:56:55 CEST 2012
On 06/06/2012 00:34, Victor Stinner wrote:
> 2012/6/5 Rurpy<rurpy at yahoo.com>:
>> In my first foray into Python3 I've encountered this problem:
>> I work in a multi-language environment. I've written a number
>> of tools, mostly command-line, that generate output on stdout.
>> Because these tools and their output are used by various people
>> in varying environments, the tools all have an --encoding option
>> to provide output that meets the needs and preferences of the
>> output's ultimate consumers.
> What happens if the specified encoding is different than the encoding
> of the console? Mojibake?
> If the output is used as in the input of another program, does the
> other program use the same encoding?
> In my experience, using an encoding different than the locale encoding
> for input/output (stdout, environment variables, command line
> arguments, etc.) causes various issues. So I'm curious of your use
>> In converting them to Python3, I found the best (if not very
>> pleasant) way to do this in Python3 was to put something like
>> this near the top of each tool[*1]:
>> import codecs
>> sys.stdout = codecs.getwriter(opts.encoding)(sys.stdout.buffer)
> In Python 3, you should use io.TextIOWrapper instead of
> codecs.StreamWriter. It's more efficient and has less bugs.
>> What I want to be able to put there instead is:
>> sys.stdout.set_encoding (opts.encoding)
> I don't think that your use case merit a new method on
> io.TextIOWrapper: replacing sys.stdout does work and should be used
> instead. TextIOWrapper is generic and your use case if specific to
> sys.std* streams.
> It would be surprising to change the encoding of an arbitrary file
> after it is opened. At least, I don't see the use case.
And if you _do_ want multiple encodings in a file, it's clearer to open
the file as binary and then explicitly encode to bytes and write _that_
to the file.
More information about the Python-ideas