On Mon, 02 Nov 2015 18:52:55 +1100, Steven D'Aprano wrote:

> In Python 2, stderr is unbuffered.
> 
> In most other environments (the shell, C...) stderr is unbuffered.
> 
> It is usually considered a bad, bad thing for stderr to be buffered. What
> happens if your application is killed before the buffer fills up? The
> errors in the buffer will be lost.
> 
> So how come Python 3 has line buffered stderr? And more importantly, how
> can I turn buffering off?

It's probably related to the fact that std{in,out,err} are Unicode
streams. 

        > type(sys.stderr)
        <class '_io.TextIOWrapper'>
        > type(sys.stderr.buffer)
        <class '_io.BufferedWriter'>
        > type(sys.stderr.buffer.raw)
        <class '_io.FileIO'>

It appears that you can turn it off with:

        sys.stderr = io.TextIOWrapper(sys.stderr.buffer.raw)
or:
        sys.stderr = io.TextIOWrapper(sys.stderr.detach().detach())

This results in a sys.stderr which appears to work and whose
.line_buffering property is False.

-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to