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

2024-05-15 00:57:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个程序,使用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创建为虚拟串行端口对。


Tags: 端口dev程序windowslink手册openpts
3条回答

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

Before opening the pseudo-terminal slave, you must pass the master's file descriptor to grantpt(3) and unlockpt(3).

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

我试图做一个应用程序,利用虚拟串行端口,以便与一些远程设备通信使用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则不同,因此从主端口读取会将消息发送给指定的从端口。我希望这能帮助你或其他遇到类似问题的人。

我不知道python,但我可以给您指出正确的方向:看一个C代码示例。这是/dev/ptmx的man页。请确保权限和所有者正确!。这是linuxquestionsforum上关于如何使用C语言的海报

相关问题 更多 >

    热门问题