[New-bugs-announce] [issue17404] ValueError: can't have unbuffered text I/O for io.open(1, 'wt', 0)

Robert Collins report at bugs.python.org
Tue Mar 12 15:42:40 CET 2013


New submission from Robert Collins:

The io library rejects unbuffered text I/O, but this is not documented - and in fact can be manually worked around:
    binstdout = io.open(sys.stdout.fileno(), 'wt', 0)
    sys.stdout = io.TextIOWrapper(binstdout, encoding=sys.stdout.encoding)
will get a sys.stdout that is unbuffered.

Note that writing to a pipe doesn't really need to care about buffering anyway, if the user writes 300 characters, the codec will output a single block and the IO made will be one write:

This test script:
import sys
import io
stream = io.TextIOWrapper(io.open(sys.stdout.fileno(), 'wb', 0), encoding='utf8')
for r in range(10):
  stream.write(u'\u1234'*500)

When run under strace -c does exactly 10 writes: so the performance is predictable. IMO it doesn't make sense to prohibit unbuffered text write I/O. readers may be another matter, but that doesn't suffer the same latency issues.

----------
messages: 184025
nosy: rbcollins
priority: normal
severity: normal
status: open
title: ValueError: can't have unbuffered text I/O for io.open(1, 'wt', 0)
type: behavior
versions: Python 2.6, Python 2.7, Python 3.1, Python 3.2, Python 3.3, Python 3.4, Python 3.5

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue17404>
_______________________________________


More information about the New-bugs-announce mailing list