9

我正在使用 pyserial 与嵌入式设备进行通信。

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

所以我们将 CMD 发送到设备,它会回复一个以 a 结尾的可变长度字符串'\n'

如果设备无法重播,则readline()超时并且z=''

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

除了检查 z 的状态之外,有没有一种很好的方法来检查是否readline()超时。

4

1 回答 1

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')
于 2010-08-09T04:51:34.307 回答