我有一个进程(在 bash 中)将数据写入串行端口。我想查看这些数据,但我认为让另一个进程读取该串行端口(例如在 Python 中)会更简单,而不是连接 Arduino 并在显示器上显示数据。然而,这带来了一些问题:
除非我实际连接物理设备,否则端口不存在(Ubuntu)。
显然,如果一个进程正在写入该串行端口,则不允许其他进程访问该端口进行读取。
我可以使用 USB 到 USB 电缆将两个 USB 端口连接在一起,但我更希望可以通过软件解决这个问题——如果你愿意的话,可以称之为“虚拟”连接。
答案1
无论如何,从同一个串行端口读取数据是行不通的,因为你会读取由偏僻的串行线路的一端,而不是本地发送的内容。(串行端口有两个端点 - 它们不像镜子那样反射数据。)
执行终端仿真程序所做的事情,并创建一个伪终端(pty) 设备。您的侦听器需要打开“pty master”设备/dev/ptmx
,并且会自动分配一个伪 tty /dev/pts/*
,其他进程可以像使用串行端口一样使用它。
在 Python 中,调用fd1, fd2 = os.openpty()
将为您提供 pty 两端的文件描述符,并os.ttyname(fd2)
返回相应的 pty 名称。此时,从 fd1 读取以接收另一个进程写入 pty 的所有数据。
在 shell 中,可以使用socat -dd pty stdio
。
或者:运行其他进程strace
来监视正在进行的实际内核“写入”调用,包括其数据。
如果进程没有仔细检查,您可以只给它一个常规文件而不是 tty 设备的路径,并将所有数据存储在该文件中。