【发布时间】:2014-08-27 21:14:06
【问题描述】:
我有一个 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()
这可以正确运行进程,但是如何让我的第二组代码从 process1 读取数据?
进程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 先工作。如何让 process2 从 process1 读取数据?我还从 process1 收到一个错误,说“Popen”对象不可迭代,但它仍然运行“信标扫描”命令。这可能是因为“信标扫描”命令不断更新吗?任何意见将是有益的。我在树莓派上使用 Rasbian
【问题讨论】:
-
查看
subprocess.check_output -
您可以尝试使用命名管道来交互进程 1 和 2。如果需要,可以使用进程 3 重新生成它们。
标签: python linux bash python-multithreading