【发布时间】:2018-10-28 06:25:06
【问题描述】:
如果我有一个带有不停止的连续数据流的管道,我在从stdin 读取 python 时遇到问题。
例如,我有 data_stream.py
import time
i = 0
while True:
print(i)
i += 1
time.sleep(2)
现在我尝试使用文件 read_data.py
读取数据import sys
for line in sys.stdin:
print(line)
当我尝试使用python3 data_stream.py | python3 read_data.py 运行它时,我没有得到任何结果,因为data_stream.py 没有完成。
我如何在data_stream.py 仍在运行时读取它?
【问题讨论】:
-
此代码无法运行,因为 (a) 您尚未导入
sys,并且 (b) 您在for的末尾没有冒号。如果没有演示您的问题的代码,我们将无法调试您的代码。此外,了解您使用的平台确实很有帮助。请阅读帮助中的minimal reproducible example,以获取有关问题内容的指导。 -
管道总是在写入程序仍在运行时馈入读取程序,但这并不意味着读取器始终可以立即看到写入,而没有一定的长度限制被满足或显式刷新。 (在 大多数 语言中,当 stdout 是 TTY 时,默认情况下对 stdout 的写入是行缓冲的,但当它是 FIFO 时,默认情况下是块大小块缓冲)。有关当前问题的非 Python 特定讨论,请参阅 BashFAQ #9。
标签: python shell command pipe stdin