Используя Python, как мне сделать виртуальный последовательный порт в Linux?
У меня есть две программы на Python, которые нужно читать с одного последовательного порта через PySerial API.
Из того, что я понимаю, нельзя иметь две программы чтения с одного последовательного порта. Поэтому я планирую сделать так, чтобы одна программа на Python считывала с физического последовательного порта, а затем копировала ТОЧНЫЕ данные, полученные с последовательного порта, в виртуальные последовательные порты, где другие программы Python могли читать ее через pySerial API.
Из двух программ Python, которые будут использовать pySerial, только одна из них ответит что-нибудь.
Есть идеи, как это сделать?
1 ответ
Создание виртуального последовательного порта может быть тривиальным или сложным в зависимости от ваших требований.
Если вам нужно только распространять данные с реального порта на виртуальный порт (и наоборот), вы можете использовать такие инструменты, как socat
, remserial
, или же conserver
, Смотрите примеры использования здесь: 1, 2, 3.
Такие инструменты создают pty (псевдо-tty) и передают данные между реальным портом и pty в обоих направлениях. Однако они не распространяют другие API, включая различные termios
а также ioctl()
звонки, специфичные для последовательного порта.
Если этого недостаточно, вам нужны более продвинутые инструменты, такие как tty0tty
или же ser2net
а также sercd
(на основании RFC 2217) и другие. Смотрите этот пост.