将多个标准输出通过管道传输到 Python 程序?

将多个标准输出通过管道传输到 Python 程序?

我有一个在 stdout 中打印的程序,我想要它的多个实例,其中每个实例的 stdout 通过管道传输到 sed,然后将结果(三个这样的 sed)通过管道传输到 python 程序。我正在做这个

rtl_power -f 430M:434M:3.2M -g 30 -i 2 | sed -i '/2024-03-25/a \ dongle1' | python calc.py

这适用于一个实例,但现在我将有 3 个实例,例如

rtl_power -f 430M:434M:3.2M -g 30 -i 2 | sed -i '/2024-03-25/a \ dongle1' 
rtl_power -f 430M:434M:3.2M -g 30 -i 2 | sed -i '/2024-03-25/a \ dongle2' 
rtl_power -f 430M:434M:3.2M -g 30 -i 2 | sed -i '/2024-03-25/a \ dongle3' 

我希望它们全部通过管道传输到同一个实例calc.py(同时),这样我就可以进行一些计算。 PS FIFO 和写入文件不是一个选项,因为我希望实时完成计算,也 rtl_power有流输出

编辑:

控制台选项卡 1:

rtl_power -f 430M:434M:3.2M -g 30 -i 2 | sed -u '/2020-03-26/a \ dongle1' > /home/username/gatewayx

控制台选项卡 2:

python /home/username/do.py < /home/username/gatewayx

输出

2
device dongle1 strength -29.04

2020-03-26, 13:49:38, 430000000, 433200000, 3200000.00, 186, -29.04, -29.04
8
2
device dongle1 strength -29.04

2020-03-26, 13:49:40, 430000000, 433200000, 3200000.00, 295, -29.04, -29.04
8
2
device dongle1 strength -29.04

2020-03-26, 13:49:42, 430000000, 433200000, 3200000.00, 302, -29.04, -29.04
8
2
device dongle1 strength -29.04

2020-03-26, 13:49:44, 430000000, 433200000, 3200000.00, 303, -29.04, -29.04
8
2
device dongle1 strength -29.03

2020-03-26, 13:49:46, 430000000, 433200000, 3200000.00, 295, -29.03, -29.03

(此时停止输出)

python脚本仅供参考:

import time
import datetime
import sys

def printthis(Var):
    print Var
while True:
    donglename="emptry"
    dbs="emptry"
    line=sys.stdin.readline()
    if not line:
        continue
    conts=line.split(' ')   
    ll=len(conts)
    print(ll)
    if len(conts)==8:
        #donglename=conts[8]
        #donglename=donglename.replace('\n','')
        dbs=conts[7]
        dbs=dbs.replace(',','')

    line2=sys.stdin.readline()
    if not line2:
        continue
    conts2=line2.split(' ') 
    ll2=len(conts2)
    print(ll2)
    if len(conts2)==2:
        donglename=conts2[1]
        donglename=donglename.replace('\n','')
        #dbs=conts[7]
        #dbs=dbs.replace(',','')

    print("device "+donglename+" strength "+dbs)


    sys.stdout.write(line)
    sys.stdout.flush()
    time.sleep(1)


相关内容