![여러 표준 출력을 Python 프로그램에 파이프로 연결하시겠습니까?](https://linux55.com/image/169894/%EC%97%AC%EB%9F%AC%20%ED%91%9C%EC%A4%80%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20Python%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%97%90%20%ED%8C%8C%EC%9D%B4%ED%94%84%EB%A1%9C%20%EC%97%B0%EA%B2%B0%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
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
이것은 하나의 인스턴스에서는 효과가 있었지만 이제는 다음과 같은 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)