将无限输出从shell命令传递到python脚本

时间:2019-05-08 09:14:32

标签: python linux python-3.x unix pipe

我想将输出从一个脚本转发到另一个。

我尝试这样做:

./producer.py > ./consumer.py

哪里有采购员:

#!/usr/bin/env python3

import sys
import time

i=0
while True:
    print(i)
    i+=1
    time.sleep(1)

和消费者:

#!/usr/bin/env python3

import sys

f= open("test.txt","w+")

while True:
    line = sys.stdin.read()
    print(line)
    f.write(line)

我希望生产者将生成:1 2 3 4 5,并且此管道将由另一个脚本保存在文件test.txt中。谢谢您的帮助。

3 个答案:

答案 0 :(得分:1)

使用管道|而非>将输出(stdout)从一个进程转发到另一个进程(如stdin)。另外,请注意管道上的数据已缓冲,当没有大量数据并且流永远不会关闭时,似乎没有任何反应。

答案 1 :(得分:0)

考虑使用带有两个线程的队列。 Here是很好的基本指南。 Here是另一本指南。

答案 2 :(得分:0)

尝试使用子流程,然后将数据从输出管道保存到文件中。您无需在外部执行命令。

from subprocess import PIPE,Popen

process = Popen(['python','test.py'],stderr=PIPE,stdout=PIPE)

output = process.stdout.readlines()