複数の標準出力をPythonプログラムにパイプで接続しますか?

複数の標準出力をPythonプログラムにパイプで接続しますか?

stdoutで印刷するプログラムがありますが、各インスタンスのstdoutがsedにパイプされ、次の結果(3つのsed)がPythonプログラムにパイプされる複数のインスタンスがあります。私はこれをやっています

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

これは1つのインスタンスでは効果がありましたが、今では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)


ベストアンサー1

おすすめ記事