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.

¿Fue útil?

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
scroll top