Estou tentando usar socat para representar um dispositivo serial externo. Se eu fizer isso em um terminal:
sudo socat -ddd -ddd PTY,raw,link=/dev/ttyS32,echo=0 READLINE
e execute esta versão simplificada do meu cliente de interface serial do Python em outro:
import serial
s = serial.Serial('/dev/ttyS32',baudrate=9600,timeout=1)
while True:
s.write("query\n")
resp = s.read()
if resp: print(resp)
Funciona como esperado: o terminal socat READLINE imprime uma 'consulta' a cada segundo, e qualquer coisa que eu digite lá é enviada para e impressa pelo cliente.
Agora eu tenho um programa em Python que emula o dispositivo serial:
#echo.py
n=0
while True:
s = raw_input()
if 'query' in s:
print n
n+=1
Isso funciona como planejado quando eu o executo a partir da linha de comando: quando eu digito 'query', ele imprime um contador.
O que não funciona é quando tento vincular os dois lados com esse comando:
sudo socat -ddd -ddd PTY,raw,link=/dev/ttyS32,echo=0 EXEC:"python echo.py"
Nesse caso, nem o cliente Python nem a janela socat mostram nenhum dado.
O que estou fazendo de errado? Como faço para vincular o stdin e stdout do echo.py ao pesudo tty para que eu possa ler / escrever nele como um dispositivo serial?
(Embora eu esteja usando o Python neste exemplo, tenho o mesmo problema com um emulador escrito em C)