Передать бесконечный вывод из команды оболочки в скрипт Python - PullRequest
0 голосов
/ 08 мая 2019

Я бы хотел перенаправить вывод из одного скрипта в другой.

Я пытаюсь сделать это так:

./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 ]

1 голос
/ 08 мая 2019

Используйте канал | вместо > для пересылки вывода (stdout) из одного процесса в другой (как stdin).Кроме того, помните, что данные по каналу буферизируются, что может показаться, что ничего не происходит, когда данных не так много и поток никогда не закрывается.

0 голосов
/ 08 мая 2019

Попробуйте использовать подпроцесс , а затем сохраните данные из выходного канала в файл. Вам не нужно выполнять команду снаружи.

from subprocess import PIPE,Popen

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

output = process.stdout.readlines()
0 голосов
/ 08 мая 2019

Рассмотрите возможность использования очереди с двумя потоками. Здесь является хорошим базовым руководством. Здесь - другое руководство.

...