Python Pyserial Timeout Read-Line Timeout
Вопрос
Я использую Pyserial, чтобы общаться с встроенным придумыванием.
ser = serial.Serial(PORT, BAUD, timeout = TOUT)
ser.write(CMD)
z = ser.readline(eol='\n')
Итак, мы отправляем CMD на устройство, и это отвечает строкой длины вариации, заканчивая в '\n'
Если разработчик не могу повторить readline()
разум и z=''
Если разработчик прерывается или аварийрует, будет ли он отправлять данные readline()
Times-Out и 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