Я запускаю команду 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