在python中从stdin读取无缓冲的

Gle*_*emi 8 python stdin unbuffered

我正在编写一个python脚本,可以通过管道从另一个命令中读取输入

batch_job | myparser
Run Code Online (Sandbox Code Playgroud)

我的脚本myparser处理输出batch_job并写入自己的标准输出.我的问题是我想立即看到输出(batch_job的输出是逐行处理的)但似乎有这个臭名昭着的stdin缓冲(据称是4KB,我还没有验证)延迟了一切.

这个问题已经讨论已经在这里 这里这里.

我尝试了以下方法:

  • 打开stdin使用 os.fdopen(sys.stdin.fileno(), 'r', 0)
  • 使用-u在我hashbang:#!/usr/bin/python -u
  • export PYTHONUNBUFFERED=1在调用脚本之前进行设置
  • 在读取的每一行之后刷新我的输出(以防问题来自输出缓冲而不是输入缓冲)

我的python版本是2.4.3 - 我没有可能升级或安装任何其他程序或包.我怎样才能摆脱这些延误?

DrM*_*DrM 0

在Linux,bash中,您正在寻找的似乎是stdbuf命令。

如果你不想缓冲(即无缓冲流),试试这个,

# batch_job | stdbuf -o0 myparser
Run Code Online (Sandbox Code Playgroud)

如果你想要行缓冲,试试这个,

# batch_job | stdbuf -oL myparser
Run Code Online (Sandbox Code Playgroud)