Skip to main content
 首页 » 编程设计

python之使用编解码器读取标准输入的延迟

2025年05月04日8三少

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

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

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

谢谢!

请您参考如下方法:

在这个看似简单的示例中有两个级别的缓冲。 为避免第一级——更像是一种变通方法而不是解决方案——您可以读取每一行然后对其进行解码,而不是相反。它之所以有效,是因为在 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