Python PySerial读取线超时

Ket*_*til 5 python pyserial

我正在使用pyserial与嵌入式设计进行通信.

ser = serial.Serial(PORT, BAUD, timeout = TOUT)
ser.write(CMD)
z = ser.readline(eol='\n')
Run Code Online (Sandbox Code Playgroud)

因此,我们将CMD发送到设备,并以一个以a结尾的变量长度字符串进行回复 '\n'

如果设计不能重播然后readline()超时和z=''

如果设备中断或崩溃,它将发送数据然后readline()超时,z将是一个没有'\n'结束的字符串.

readline()除了检查z的状态之外,还有一种很好的方法可以检查是否超时.

pyI*_*Sky 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')
Run Code Online (Sandbox Code Playgroud)

  • 为什么使用正则表达式?难道 `if '\n' in buff` 不会更高效、更短吗? (2认同)