我有一个应用程序,我想在其中模拟设备和“调制解调器”之间的连接。该设备将连接到一个串行端口,并通过它与软件调制解调器通信。
出于测试目的,我希望能够使用模拟软件设备来测试发送和接收数据。
示例 Python 代码
device = Device()
modem = Modem()
device.connect(modem)
device.write("Hello")
modem_reply = device.read()
现在,在我的最终应用程序中,我将只传递/dev/ttyS1 或 COM1 或任何应用程序要使用的内容。 但是我怎样才能在软件中做到这一点呢?我正在运行 Linux 并且应用程序是用 Python 编写的。
我已经尝试制作一个 FIFO (mkfifo ~/my_fifo
) 并且确实有效,但是我需要一个 FIFO 用于写入,一个用于读取。我想要的是打开 ~/my_fake_serial_port
并对其进行读写。
我也用 pty
模块付款,但也无法让它工作。我可以从 pty.openpty()
获取主从文件描述符,但尝试读取或写入它们只会导致 IOError Bad File Descriptor
错误消息。
更新
评论将我指向 SO 问题 Are there some program like COM0COM in linux?它使用 socat
来设置虚拟串行连接。
我是这样使用它的:
socat PTY,link=$HOME/COM1 PTY,link=$HOME/COM2
对于你们中的其他人,感谢你们为我提供了宝贵的信息。 我选择接受 Vinay Sajips 的回答,因为这是我在 socat 建议出现之前寻求的解决方案。它似乎工作得很好。
最佳答案
可能最好使用 pyserial与串行端口通信,您只需创建一个模拟版本的 serial.Serial
类,它实现了 read
、readline
、write
以及您需要的任何其他方法。
关于python - Linux下伪串口通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2500420/