gpt4 book ai didi

python - 如何在 python 中使用伪终端来模拟串口?

转载 作者:IT王子 更新时间:2023-10-29 01:16:04 26 4
gpt4 key购买 nike

我正在使用 twisted 创建一个 python 应用程序,它从串行端口读取行。为了(单元)测试该应用程序而不必将实际设备连接到串行端口(也在没有实际串行端口的 pc 上)我想创建一个 python 脚本/应用程序来设置虚拟串行端口并写入它,因此扭曲的应用程序可以连接到虚拟串行端口的另一端并从中读取。这样我就可以编写一些单元测试了。

我发现在 Linux 中使用伪终端是可能的。我还在 https://askubuntu.com/questions/9396/virtual-serial-port-for-testing-purpose 上找到了一个有效的示例脚本.

我想将该脚本更改为一个类,我可以在该类上调用 write 方法将数据写入串行端口,然后测试扭曲的应用程序。

这个示例脚本使用 poll 和 select 以及一个我不太了解的 linux stty 命令做了很多事情。我希望有人可以填补我的知识空白或提供一些提示。

干杯,

狼。

最佳答案

除了 Jean-Paul Calderone 所说的(大部分是正确答案)之外,我还使用 socat 在 python 中制作了以下脚本。

这可以导入并实例化到一个解释器中,然后你可以使用它的 writeLine 方法将数据写入一个(虚拟)串口,该串口通过 socat 连接到另一个(虚拟)串口,另一个扭曲的应用程序可以听。但正如 Jean-Paul Calderone 所说:如果它只是你想要的单元测试,你真的不需要做这些事情。只需阅读他提到的文档即可。

import os, subprocess, serial, time
from ConfigParser import SafeConfigParser


class SerialEmulator(object):
def __init__(self,configfile):
config=SafeConfigParser()
config.readfp(open(configfile,'r'))
self.inport=os.path.expanduser(config.get('virtualSerialPorts','inport'))
self.outport=os.path.expanduser(config.get('virtualSerialPorts','outport'))
cmd=['/usr/bin/socat','-d','-d','PTY,link=%s,raw,echo=1'%self.inport,'PTY,link=%s,raw,echo=1'%self.outport]
self.proc=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
time.sleep(3)
self.serial=serial.Serial(self.inport)
self.err=''
self.out=''
def writeLine(self,line):
line=line.strip('\r\n')
self.serial.write('%s\r\n'%line)
def __del__(self):
self.stop()
def stop(self):
self.proc.kill()
self.out,self.err=self.proc.communicate()

关于python - 如何在 python 中使用伪终端来模拟串口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15173614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com