Я пытаюсь использовать socat для олицетворения внешнего последовательного устройства. Если я делаю это в одном терминале:
sudo socat -ddd -ddd PTY,raw,link=/dev/ttyS32,echo=0 READLINE
и запустите эту упрощенную версию моего клиента последовательного интерфейса Python в другом:
import serial
s = serial.Serial('/dev/ttyS32',baudrate=9600,timeout=1)
while True:
s.write("query\n")
resp = s.read()
if resp: print(resp)
Он работает, как и ожидалось: терминал READLINE socat печатает полученный «запрос» каждую секунду, и все, что я набираю, отправляется и печатается клиентом.
Теперь у меня есть программа на Python, которая эмулирует последовательное устройство:
#echo.py
n=0
while True:
s = raw_input()
if 'query' in s:
print n
n+=1
Это работает как задумано, когда я запускаю его из командной строки: когда я набираю 'query', он печатает счетчик.
Что не работает, так это когда я пытаюсь связать две стороны вместе с помощью этой команды:
sudo socat -ddd -ddd PTY,raw,link=/dev/ttyS32,echo=0 EXEC:"python echo.py"
В этом случае ни клиент Python, ни окно socat не показывают никаких данных.
Что я делаю неправильно? Как связать stdin и stdout echo.py с pesudo tty, чтобы я мог читать / записывать его как последовательное устройство?
(Хотя я использую Python в этом примере, у меня та же проблема с эмулятором, написанным на C)