Versuche dies:
sudo socat -ddd -ddd PTY,raw,echo=0 "EXEC:'python /tmp/echo.py',pty,raw,echo=0"
(aus irgendeinem Grund mochte mich nicht den Link Angabe = aber die oben angegebenen /dev/pts/6
so lief ich:
$ sudo python pyserial1.py 4 1 1 8 ...
Ich versuche, Socat zu verwenden, um sich als externes serielles Gerät auszugeben. Wenn ich das in einem Terminal mache:
sudo socat -ddd -ddd PTY,raw,link=/dev/ttyS32,echo=0 READLINE
und führen Sie diese vereinfachte Version meines seriellen Python-Interface-Clients in einem anderen aus:
import serial s = serial.Serial('/dev/ttyS32',baudrate=9600,timeout=1) while True: s.write("query\n") resp = s.read() if resp: print(resp)
Es funktioniert wie erwartet: Das READLINE socat-Terminal druckt jede Sekunde eine empfangene "Abfrage", und alles, was ich dort eingebe, wird an den Client gesendet und von diesem gedruckt.
Jetzt habe ich ein Python-Programm, das das serielle Gerät emuliert:
#echo.py n=0 while True: s = raw_input() if 'query' in s: print n n+=1
Dies funktioniert wie beabsichtigt, wenn ich es über die Befehlszeile ausführe: Wenn ich 'Abfrage' eingebe, wird ein Zähler ausgegeben.
Was nicht funktioniert ist, wenn ich versuche, die beiden Seiten mit diesem Befehl zu verknüpfen:
sudo socat -ddd -ddd PTY,raw,link=/dev/ttyS32,echo=0 EXEC:"python echo.py"
In diesem Fall zeigen weder der Python-Client noch das Socat-Fenster Daten.
Was mache ich falsch? Wie verbinde ich 'echo.pys stdin und stdout mit dem Pesudo tty, damit ich es wie ein serielles Gerät lesen / schreiben kann?
(Obwohl ich in diesem Beispiel Python verwende, habe ich dasselbe Problem mit einem Emulator, der in C geschrieben wurde.)
Versuche dies:
sudo socat -ddd -ddd PTY,raw,echo=0 "EXEC:'python /tmp/echo.py',pty,raw,echo=0"
(aus irgendeinem Grund mochte mich nicht den Link Angabe = aber die oben angegebenen /dev/pts/6
so lief ich:
$ sudo python pyserial1.py 4 1 1 8 ...