gpt4 book ai didi

python - 启动一个新进程并读取该进程的输出

转载 作者:太空宇宙 更新时间:2023-11-04 11:05:12 24 4
gpt4 key购买 nike

我有一个 python 脚本从管道 bash 脚本读取数据

sudo beacon scan -b | get.py

我想消除 bash 管道的使用,并用 python 编写所有内容。我正在尝试并行打开几个进程以使我的程序按我需要的方式工作。 Process1 需要启动“sudo beacon scan -b”命令并保持运行。 Process2 需要将该数据发送到我的服务器。最后一个进程需要监控 process1 或 process2 是否在工作,如果没有则重新启动它们。

我写了process1和process2。

进程 1:

#!/usr/bin/python
import subprocess
import multiprocessing

cmd = ['sudo', '/usr/local/bin/beacon', 'scan', '-b']
def scan():
x = multiprocessing.Process(args=(subprocess.Popen(cmd)))
x.start()
x.join()

scan()

这会正确运行进程,但我如何获得第二组代码来读取进程 1 中的数据?

进程2

import requests

for line in fileinput.input() #This needs to call the other process?
if line.startswithh('ibeacon'):
line = line.strip()
a = line.split(' ')[1]
a = line.split(' ')[2]
a = line.split(' ')[3]
a = line.split(' ')[4]
a = line.split(' ')[5]
payload = {'uuid': a, 'major': b, 'minor': c, 'power': d, 'rssi': e}
r = requests.get('http://posttestserver.com/post.php', params=payload)

我还不知道如何编写 process3,但我需要 process1&2 先工作。如何让进程 2 从进程 1 读取数据?我还从 process1 收到错误消息,指出“Popen”对象不可迭代,但它仍然运行“信标扫描”命令。这可能是因为“信标扫描”命令不断更新吗?任何意见将是有益的。我在 Raspberry Pi 上使用 Rasbian

最佳答案

下面的代码做你想做的:

1) 它将脚本作为子进程运行。 (出于测试目的,我将其更改为运行“ping”3 秒。)

2) 当每一行都是从子进程发出时,父进程会处理它。在这种情况下,它调用 send_beacon(),将一些数据传输到另一台服务器。

3) 没有#3。利润!

来源

import requests, subprocess

def send_beacon(line):
if line.startswith('ibeacon'):
line = line.strip()
a = line.split(' ')[1]
a = line.split(' ')[2]
a = line.split(' ')[3]
a = line.split(' ')[4]
a = line.split(' ')[5]
payload = {'uuid': a, 'major': b, 'minor': c, 'power': d, 'rssi': e}
r = requests.get('http://posttestserver.com/post.php', params=payload)

if __name__=='__main__':
if 0:
cmd = ['sudo', '/usr/local/bin/beacon', 'scan', '-b']
else: # testing
cmd = 'ping -c3 8.8.8.8'.split()
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
for line in iter(proc.stdout.readline, ''):
print 'X:',line,
send_beacon(line)

输出

X: PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
X: 64 bytes from 8.8.8.8: icmp_seq=1 ttl=43 time=46.9 ms
X: 64 bytes from 8.8.8.8: icmp_seq=2 ttl=43 time=94.5 ms
X: 64 bytes from 8.8.8.8: icmp_seq=3 ttl=43 time=48.1 ms
X:
X: --- 8.8.8.8 ping statistics ---
X: 3 packets transmitted, 3 received, 0% packet loss, time 2002ms
X: rtt min/avg/max/mdev = 46.922/63.221/94.554/22.161 ms

关于python - 启动一个新进程并读取该进程的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25537034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com