3

Я пытаюсь использовать 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)

1 ответ1

2

Попробуй это:

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
...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .