У меня есть скрипт python, который считывает данные из скрипта bash с конвейером.
sudo beacon scan -b | get.py
Я хочу отказаться от использования конвейера bash и написать все на python. Я пытаюсь открыть несколько процессов параллельно, чтобы моя программа работала так, как мне нужно. Процессу 1 необходимо запустить команду «sudo beacon scan -b» и поддерживать ее выполнение. Process2 должен отправить эти данные на мои серверы. Последний процесс должен отслеживать, работают ли процесс 1 или процесс 2, а если нет, то перезагружать их.
Я написал 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? Я также получаю сообщение об ошибке от процесса 1, в котором говорится, что объект «Popen» не является итерируемым, но он по-прежнему запускает команду «beacon scan». Может ли это быть из-за того, что команда «сканирование маяков» постоянно обновляется? Любые советы будут полезны. Я использую Rasbian на Raspberry Pi.
subprocess.check_output
- person hlt   schedule 28.08.2014