从管道读取没有结束

时间:2018-05-17 21:21:02

标签: python shell command pipe stdin

如果我的管道连续数据流不能停止,我就会遇到使用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仍在运行时阅读?

1 个答案:

答案 0 :(得分:1)

您必须从read_data.py“刷新”data_stream.py和“readline”中的标准输出。 完整的代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  data_stream.py

import sys
import time

i = 0
while True:
    print(i)
    i += 1
    sys.stdout.flush()
    time.sleep(2)

read_data.py的代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  read_data.py

import sys

# Now I try to read the data with the file read_data.py

while True:
    line = sys.stdin.readline()
    print (line),

最诚挚的问候,