我使用pyserial与嵌入色器件进行通信。

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

因此,我们发送CMD到设备并且将其与varing长度结束在'\n'的串回复

如果该色器件不能重播然后readline()倍出和z=''

如果该色器件被中断或崩溃将它发送数据然后readline()倍出 和z将没有在端部具有'\n'的字符串。

是否有一个很好的方法,以检查是否readline()已经超时以外检查z的状态。

有帮助吗?

解决方案

我认为你会喜欢做的是什么..

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')
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top