![将多个标准输出通过管道传输到 Python 程序?](https://linux22.com/image/169894/%E5%B0%86%E5%A4%9A%E4%B8%AA%E6%A0%87%E5%87%86%E8%BE%93%E5%87%BA%E9%80%9A%E8%BF%87%E7%AE%A1%E9%81%93%E4%BC%A0%E8%BE%93%E5%88%B0%20Python%20%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
我有一个在 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)