Python PySerial:如何理解从串行端口读取时发生超时?
我正在使用Python PySerial:如何理解从串行端口读取时发生超时?,python,serial-port,timeout,pyserial,Python,Serial Port,Timeout,Pyserial,我正在使用PySerial从串口读取数据,如下代码所示。 CheckReadUntil()读取我发送到串行端口的命令的输出,直到符号序列readUntil在串行输出中 ... self.ser = serial.Serial(comDev, 115200, timeout=10) ... #Function that continue to read from Serial port until 'readUntil' #sequence of symbols appears def C
PySerial
从串口读取数据,如下代码所示。
CheckReadUntil()
读取我发送到串行端口的命令的输出,直到符号序列readUntil
在串行输出中
...
self.ser = serial.Serial(comDev, 115200, timeout=10)
...
#Function that continue to read from Serial port until 'readUntil'
#sequence of symbols appears
def CheckReadUntil(self, readUntil):
outputCharacters = []
while 1:
ch = self.ser.read()
outputCharacters += ch
if outputCharacters[-len(readUntil):]==readUntil:
break
outputLines = ''.join(outputCharacters)
return outputLines
但是,如果没有序列readUntil
(出于任何原因),我将永远停留在函数CheckReadUntil()
中。设置timeout=10
设置了超时,所以我陷入了一个循环,每10秒迭代一次,什么都不做,只是等待
如何理解有一个超时事件,以便我可以退出无限循环?输出长度可能不同。更新(前面的答案不正确,这是@konstantin的工作代码):
你好谢谢你的回复,只是检查了一下。您的解决方案存在一个问题:每次读取时,我们可能需要等待超时。例如,我们尝试读取'abcdefg'和readUntil='efg'。因此,我们先读取'abc',然后读取'def',然后等待'g'一段超时时间。我要做的是读取'ch=self.ser.read()'+'如果len(ch)==0:'而不是相应的行。现在一切都很好!我们需要等待超时只有当我们挂断,而不是所有的时间!再次感谢您的回复@康斯坦丁你能解释一下/发布你的最终解决方案吗,thanks@schantischul,问题的实质是串行超时不会引发超时异常。通过检查是否未返回任何字符来检测超时:
如果len(ch)=0:break
。请注意,文档中提到了一个read_until()
函数,其行为与上述CheckReadUntil()函数类似。
...
self.ser = serial.Serial(comDev, 115200, timeout=10)
...
#Function that continue to read from Serial port until 'readUntil'
#sequence of symbols appears
def CheckReadUntil(self, readUntil):
outputCharacters = []
while 1:
ch = self.ser.read()
if len(ch) == 0:
break
outputCharacters += ch
if outputCharacters[-len(readUntil):]==readUntil:
break
outputLines = ''.join(outputCharacters)
return outputLines