2010-08-09 16 views
4

J'utilise pyserial pour communiquer avec un système intégré.Python PySerial read-line timeout

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

Nous envoyer CMD à l'appareil et il répond avec une chaîne de fin de longueur de varing dans un '\n'

si le legs ne peux pas rejouer ensuite readline() fois-out et z=''

si le legs est interrompu ou se bloque, il envoie les données puis readline() time-out et z sera une chaîne sans '\n' à la fin.

Existe-t-il un bon moyen de vérifier si readline() a dépassé le délai de vérification de l'état de z.

Répondre

4

Je pense que ce que vous aimeriez faire est ..

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')