Python PySerial 读取行超时
我正在使用pyserial来和一个嵌入式设备进行通信。
ser = serial.Serial(PORT, BAUD, timeout = TOUT)
ser.write(CMD)
z = ser.readline(eol='\n')
我们向设备发送命令,然后设备会回复一个长度不固定的字符串,最后以一个'\n'
结束。
如果设备没有回复,readline()
就会超时,这时候z=''
。
如果设备在发送数据时被中断或者崩溃,readline()
也会超时,这时z
的值会是一个没有'\n'
结尾的字符串。
有没有什么好的方法可以检查readline()
是否超时,而不是单纯检查z
的状态呢?
2 个回答
0
PySerial 有一个叫做 read_until 的方法,专门用来做这个事情。它会一直读取串口的数据,直到找到你预期的内容(默认是换行符‘\n’),或者读取的数据超过了设定的大小,或者超时了。
5
我觉得你可能想要做的是……
import re
import time
import serial
def doRead(ser,term):
matcher = re.compile(term) #gives you the ability to search for anything
tic = time.time()
buff = ser.read(128)
# you can use if not ('\n' in buff) too if you don't like re
while ((time.time() - tic) < tout) and (not matcher.search(buff)):
buff += ser.read(128)
return buff
if __name__ == "__main__":
ser = serial.Serial(PORT, BAUD, timeout = TOUT)
ser.write(CMD)
print doRead(ser,term='\n')