pySerial read_until() 只读取第一个字节

pySerial read_until() reads only the first byte

所以我正在使用 pySerial 从串口接收数据。我有一个非常简单的代码,它读取第一个字节,检查它是否是起始字节(在我的例子中是 0x02),然后读取直到找到结束字节(在我的例子中是 0x03)。

配置串行通信

port = 'COM3'
baud = 38400

ser = serial.Serial(port, baud, timeout=0)
if ser.isOpen():
    ser.close()
    ser.open()

ser.reset_input_buffer()
ser.reset_output_buffer()

主循环在 while True staement 内,如下所示。

while True:
    data = ""
    data_raw = ser.read(1)
    if data_raw == b'\x02':
        data_raw = ser.read_until(b'\x03')
        print(str(data_raw))
        ser.reset_input_buffer()
        ser.reset_output_buffer()
        time.sleep(.5)

问题是,由于某种原因,read_until() 实际上只读取第一个字节,而我从串行端口接收的数据实际上是 b'\x02\xff\x9c\x81E1\x03\'

在正确阅读 \x02 后,read_until() 语句只读取了下一个 \xff 我不明白为什么

pySerial 模块本身似乎从未修复过 https://github.com/pyserial/pyserial/issues/181

serial.Serial() 中使用 timeout=None 解决了问题