The buffering in question would largely be a problem on the script's side, not the Python side; while Python would buffer the reads, it wouldn't block unless the buffer was emptied and there was nothing available to read.
So really, you need to disable buffering in the script itself. Adding stdbuf -oL
(or -o0
for completely unbuffered, but line buffering should cover you since you read by line as well) to your commands should help in some cases (where the programs don't adjust their own buffering internally).
If you're seeing this behavior only by looking at Python's output, be aware that Python itself can buffer output as well. You can disable this by passing -u
when running Python, or setting the environment variable PYTHONUNBUFFERED=1
before running it, or from within a script, you can manually call sys.stdout.flush()
after any writes (direct, or implicit via print
) to stdout. On modern Python, print
takes an argument to force a flush
after printing, but since you're on Python 2.x, that's not an option.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…