Python PySerial tiempo de espera de la línea de lectura
Pregunta
Estoy usando PySerial para comunicarse con una elaborar incrustado.
ser = serial.Serial(PORT, BAUD, timeout = TOUT)
ser.write(CMD)
z = ser.readline(eol='\n')
Así que enviamos CMD al dispositivo y responde con una cadena de varing longitud que termina en una '\n'
Si el legado no puede reproducir a continuación readline()
veces-out y z=''
Si el legado se interrumpe o se bloquea se está enviando los datos a continuación, tiempo de espera del readline()
y z será una cadena sin un '\n'
al final.
¿Hay una buena manera de comprobar si readline()
ha agotado el tiempo de espera que no sea comprobar el estado de z.
Solución
Creo que lo que le gustaría hacer es ..
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')
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow