Как мне подойти к чтению/опросу данных датчиков в реальном времени из подпроцесса (или другого подхода)?Python

Программы на Python
Ответить
Anonymous
 Как мне подойти к чтению/опросу данных датчиков в реальном времени из подпроцесса (или другого подхода)?

Сообщение Anonymous »

Я запускаю команду Java, используя файл jar, который передает данные датчиков в реальном времени и отправляет эти данные на /dev/ttyUSB3 каждые 15 секунд или около того. Я пытаюсь определить лучший способ справиться с этим. Я ни в коем случае не являюсь экспертом в Python, но могу с ним достаточно комфортно разобраться. К сожалению, это означает, что я, по сути, могу методом проб и ошибок заставить его работать, но, возможно, я не думаю о проблеме или не подхожу к ней правильным способом.
На этом этапе у меня есть несколько проблем:
  • Как мне подойти к этому? Кажется, все признаки в Интернете указывают на то, что подпроцесс — это правильный путь.
  • Как мне настроить подпроцесс для этого подхода?
  • Я хочу убедиться, что код Java, обрабатывающий jar, закрывается при закрытии команды Python.
Если я запускаю java jar из bash, я получаю вывод, который выглядит следующим образом:

Код: Выделить всё

$ java -jar myjavajar.jar -port /dev/ttyUSB3 -baud 115200 -flow hardware
Вывод:

Код: Выделить всё

Opened serial port /dev/ttyUSB3 at 115200
SensorData [1,2,3]
SensorData [4,5,6]
SensorData [7,8,9]
Сейчас я пытаюсь поместить его в подпроцесс и пробовал всевозможные варианты (subprocess.Popen, subprocess.run, subprocess.check_output, я пробовал Shell=true, stdout=subprocess.PIPE и несколько других подходов, я пробовал все разные сценарии, которые гуглил, и т. д.). Ниже представлена ​​одна из моих недавних попыток:

Код: Выделить всё

import subprocess
process = subprocess.run(['java', '-jar', 'myjavajar.jar', '-port', '/dev/ttyUSB3', '-baud', '115200', '-flow', 'hardware'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(process)
Я предполагаю, что он работает, потому что никогда не завершает работу (что имеет смысл, поскольку он, скорее всего, постоянно получает данные). К сожалению, мне нужно, чтобы он получал данные и обрабатывал/печатал их по мере поступления данных.
Это означает либо:
  • У меня неправильно настроен подпроцесс
  • Я в целом использую неправильный подход, и мне нужно обрабатывать его иначе, чем подпроцесс
  • Это невозможно, и мне нужно найти другой подход/решение этой проблемы
Буду очень признателен за любую помощь, которая направит меня в правильном направлении!

Подробнее здесь: https://stackoverflow.com/questions/784 ... s-or-other
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»