如何使用/dev/ptmx创建虚拟串口?
我有一个程序,使用的是pyserial库,我想在没有真实串口设备的情况下测试它。
在Windows系统中,我使用com0com这个工具,而在Linux系统中,我知道有一种方法可以创建虚拟串口对,不需要额外的程序。
所以我查了一下手册,发现了pts和/dev/ptmx,但我不知道怎么按照手册创建一对虚拟串口,有人能给我一个例子吗?
我试过(用Python):
f = open("/dev/ptmx", "r")
结果是成功的,/dev/pts/4被创建了。
然后我又试了:
f = open("/dev/4", "w")
结果是:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 5] Input/output error: '/dev/pts/4'
补充:我找到了一种解决方案(变通方法),使用socat。
socat PTY,link=COM8 PTY,link=COM9
这样就创建了COM8和COM9作为虚拟串口对。
5 个回答
6
我在尝试制作一个应用程序,目的是通过虚拟串口与一些远程设备进行通信,使用的是TCP/串口转换... 结果遇到了一个和你类似的问题。我的解决办法是这样的:
import os, pty, serial
master, slave = pty.openpty()
s_name = os.ttyname(slave)
ser = serial.Serial(s_name)
# To Write to the device
ser.write('Your text')
# To read from the device
os.read(master,1000)
虽然主设备的端口名称是一样的,但如果你检查(/dev/ptmx),你会发现如果你创建了另一个主从配对,文件描述符(fd)是不同的。所以从主设备读取数据时,你得到的是发给它所连接的从设备的消息。希望这对你或者其他遇到类似问题的人有帮助。