9

組み込みデバイスとの通信にpyserialを使用しています。

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

したがって、CMDをデバイスに送信すると、次の長さのさまざまな文字列で応答します。'\n'

デバイスが再生できない場合は、readline()タイムアウトしてz=''

デバイスが中断されたりクラッシュしたりすると、データが送信されてタイムアウトになり、zは末尾にreadline()aが付いていない文字列になります。'\n'

readline()zの状態をチェックする以外に、タイムアウトしたかどうかをチェックする良い方法はありますか?

4

1 に答える 1

5

あなたがしたいと思うかもしれないことは..

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')
于 2010-08-09T04:51:34.307 に答える