当前位置: 代码迷 >> python >> PySerial:如何理解从串口读取时发生的超时?
  详细解决方案

PySerial:如何理解从串口读取时发生的超时?

热度:108   发布时间:2023-07-16 10:28:33.0

我正在使用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的工作代码):

...

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