Python PySerial тайм-аут чтения строки - PullRequest
5 голосов
/ 09 августа 2010

Я использую pyserial для связи со встроенным устройством.

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

Итак, мы отправляем CMD на устройство, и оно отвечает строкой переменной длины, оканчивающейся на '\n'

, если устройство не может воспроизводиться, затем readline() время ожидания иz=''

если устройство прервано или произойдет сбой, будет ли отправлена ​​информация, тогда readline() время ожидания и z будет строкой без '\n' в конце.

Isесть хороший способ проверить, истекло ли время ожидания у readline(), кроме проверки состояния z.

1 Ответ

5 голосов
/ 09 августа 2010

Я думаю, что вы могли бы сделать, это ..

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