除了 Jean-Paul Calderone 所说的(大部分是正确答案)之外,我还在 python 中使用 socat 制作了以下脚本。
这可以导入并实例化到解释器中,然后您可以使用它的 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()