如何使用/ dev/ptmx创建虚拟串口?

lin*_*ida 6 python linux serial-port

我有一个程序,使用pyserial,我想测试它而不使用真正的串口设备.

在Windows中,我使用com0com,在linux中,我知道有一种方法可以创建虚拟串行端口对而无需使用其他程序.

所以我查阅了手册,找到了pts,/ dev/ptmx,但我不知道如何按照手册创建一对,有人能给我举个例子吗?

我试过(在python中):

f = open("/dev/ptmx", "r")
Run Code Online (Sandbox Code Playgroud)

并且它工作,/ dev/pts/4被创建.

我试过了:

f = open("/dev/4", "w")
Run Code Online (Sandbox Code Playgroud)

结果是:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 5] Input/output error: '/dev/pts/4'
Run Code Online (Sandbox Code Playgroud)

编辑:我找到了一个使用socat的解决方案(workround).

socat PTY,link=COM8 PTY,link=COM9
Run Code Online (Sandbox Code Playgroud)

然后COM8 COM9创建为虚拟串行端口对.

小智 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)
Run Code Online (Sandbox Code Playgroud)

虽然如果你检查(/ dev/ptmx),主机端口的名称是相同的,如果你创建另一个主机,从机对,fd是不同的,所以从主机读取将获得发给他指定的从机的消息.我希望这可以帮助您或其他任何遇到类似问题的人.


Ale*_*lli 4

根据文档,您需要ptsname来获取伪终端从属端的名称,并且引用文档,

在打开伪终端从站之前,必须将主站的文件描述符传递给grantpt(3)和unlockpt(3)。

您应该能够使用ctypes来调用所有需要的函数。

  • Python 示例隐藏在“pty”模块中,尽管它可以方便地让“os.openpty”在可以时完成实际工作:) (2认同)