题
我使用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')
不隶属于 StackOverflow