使用管道运算符在两个 python 脚本之间流式传输多批数据

Streaming multiple batches of data between two python scripts using pipe operator

我想连续地将数据从 script1.py 流式传输到 script2.py,而不在磁盘上创建中间文件。我正在尝试做的一个例子如下:

script1.py

import time
import sys

for i in range(5):
    print i # stream of data
    print 'eof' # marker to separate files 
    sys.stdout.flush()
    time.sleep(1)

此脚本的输出完全符合我的要求。 0-4 以一秒睡眠周期打印。

我想script2.pyscript1.py收集数据,直到字符串'eof',立即写入stdout,等待下一批数据。

script2.py

import time
import sys
data= sys.stdin.read()
sys.stdout.write(data)
sys.stdout.flush()
time.sleep(1)

当我尝试 运行 时:

python script1.py | python script2.py

script2.py 等待来自 script1.py (0-4) 的全部数据,然后将它们一起写入标准输出,而不是一次写入一个数字。是否可以在 script1.pystdout.flush 之后从 script2.py 输出数据?

更新基于评论:

我无法从 script1.py 调用 script2.py,因为这两个脚本位于不同的 docker 容器中,我想避免在 docker 中安装 docker =]容器。

一次只读一行 readline in script2.py:

import time
import sys
while True:
    data = sys.stdin.readline()
    sys.stdout.write(data)
    sys.stdout.flush()
    time.sleep(1)

只要看到 eof:

就只打印数字的版本
import time
import sys

data = ''
while True:
    line = sys.stdin.readline()
    if line.strip() != 'eof':
        data += line
        continue
    else:
        sys.stdout.write(data)
        sys.stdout.flush()
        time.sleep(1)
        data = ''