2014-11-21 28 views
17

Python 2支持无缓冲的文本I/O。为什么文本I/O必须在python 3中缓冲?

相同的方法在python 3中不起作用。为什么禁用了无缓冲的文本I/O?

> import sys 
> sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) 
builtins.ValueError: can't have unbuffered text I/O 

二进制仍然正常工作:

> sys.stdout = os.fdopen(sys.stdout.fileno(), 'wb', 0) # works fine 
+0

至少在阅读中,我怀疑它是与文字是unicode的,让字节!=字符。如果底层字节流是utf-8编码的,则单个字符是可变字节数,因此在读完完整字符后必须有一个缓冲区来包含剩余字节。我认为有一个新的io模块(和上面的sys.stdout可能是一个IO类实例)。 – 2014-11-22 01:01:58

回答

1

对于文本文件,如果你要使用的缓存行由行,使用open(..., buffering=1)

从Python文档:

1,选择行缓冲(只在文本模式下使用)