如何编写适用于Linux管道的Python脚本?

sat*_*oru 4 python linux

speaker.py,我print用来输出文本STDOUT:

import time

while True:
    time.sleep(1)
    print("hello")
Run Code Online (Sandbox Code Playgroud)

listener.py,我input用来读取STDIN:

while True:
    line = input()
    if not line:
        break
    print(line)
Run Code Online (Sandbox Code Playgroud)

我正在尝试用管道连接这两个脚本:

python speaker.py | python listener.py

listner.py没有输出.

怎么了?

tri*_*eee 5

没有什么是错的,但你碰到了缓冲.拿出来sleep,你应该立即看到输出.

http://mywiki.wooledge.org/BashFAQ/009名义上是一个Bash问题,但适用于任何Unix类型的I/O,并彻底解释了这些问题.


小智 5

Andrea提到的重新打开stdout的替代方法是使用-u选项以无缓冲模式启动Python:

python -u speaker.py | python -u listener.py
Run Code Online (Sandbox Code Playgroud)