2

我正在尝试使用下面的代码使用编解码器简单地从标准输入读取

import codecs

ins = codecs.getreader('utf-8')(sys.stdin, 'replace')
for l in ins:
    print l

我有另一个脚本以突发小数据写入标准输出。我需要我的脚本在每次突发后处理数据。但是,编解码器似乎可以缓冲数据。这意味着写入标准输出的行不会立即出现在我上面的阅读器代码中。我可以设置一个参数来防止缓冲吗?

谢谢!

4

1 回答 1

2

在这个看似简单的示例中,有两个级别的缓冲。为了避免第一级——更多的是作为一种解决方法而不是解决方案——你可以阅读每一行然后对其进行解码,而不是反过来。它之所以有效,是因为在 utf-8 中行尾仍然是明确的 \n 。(注意:这第一段代码不起作用,因为它仍然具有第二级缓冲!它包含用于解释目的)

for l in sys.stdin:
    l = l.decode('utf-8', 'replace')
    print l

第二个层次来自for l in file。所以你实际上需要:

while True:
    l = sys.stdin.readline()
    if not l: break
    l = l.decode('utf-8', 'replace')
    print l
于 2013-06-18T20:56:32.187 回答