Kon*_*tin 4 python timeout serial-port 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 CheckReadUntil(self, readUntil):
outputCharacters = []
while 1:
ch = self.ser.read()
outputCharacters += ch
if outputCharacters[-len(readUntil):]==readUntil:
break
outputLines = ''.join(outputCharacters)
return outputLines
Run Code Online (Sandbox Code Playgroud)
但是,如果没有序列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
Run Code Online (Sandbox Code Playgroud)