$ cat script.py
import sys
for line in sys.stdin:
sys.stdout.write(line)
sys.stdout.flush()
$ cat script.py - | python -u script.py
的输出是正确的,但它只是开始打印一次我按下Ctrl-d,而下开始打印的时候了:为什么即使在刷新和使用-u时,python仍然会缓存stdout?
$ cat script.py - | cat
害得我以为缓冲并非来自猫。
我设法得到它的工作做:
for line in iter(sys.stdin.readline, ""):
如下解释:Streaming pipes in Python,但我不明白为什么如预期前解决方案不起作用。
我编辑了我的问题,解释它为什么似乎不是来自猫本身。 –
你的改变没有什么区别......它是第一只缓冲的猫,因为输出到了管道。改变管道后的水槽不会改变任何东西。您可以通过简单地执行“cat script.py - ”来看到它,并且看到它会立即输出script.py,因为它将转到终端而不是管道。 –
也许我的例子并不清楚,但我认为它表明,第一只猫不缓冲,因为script.py的内容在EOF发送给第一只猫之前显示。 –