Попробуй это:
sudo socat -ddd -ddd PTY,raw,echo=0 "EXEC:'python /tmp/echo.py',pty,raw,echo=0"
(по какой-то причине мне не нравилось указывать ссылку =, но приведенное выше, /dev/pts/6
поэтому я запустил:
$ sudo python pyserial1.py 4 1 1 8 ...
Я пытаюсь использовать 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)
Попробуй это:
sudo socat -ddd -ddd PTY,raw,echo=0 "EXEC:'python /tmp/echo.py',pty,raw,echo=0"
(по какой-то причине мне не нравилось указывать ссылку =, но приведенное выше, /dev/pts/6
поэтому я запустил:
$ sudo python pyserial1.py 4 1 1 8 ...