Python: последовательный тайм-аут не работает при использовании readline

Хорошо, я не понимаю этого. Я смотрел везде сейчас, но я не понимаю, почему это не работает:

def main():
    time = sys.argv[1]
    ser = serial.Serial('/dev/ttyACM0',9600, timeout=1)
    paramstr= "A 5 " + time + " 0 0 0"
    ser.write(paramstr)
    print 'sent'
    print 'now listening...'
    while True:
        dbstr = ser.readline()
        fo.write(str(dbstr));
    fo.close()
    ser.close()
    print 'exiting.'

Это мое def main в python, Что я делаю, это отправка строки serial от моего Raspberry Pi до моего Teensy (Arduino). Teensy успешно запускает программу и отправляет 1200 строк обратно serial малине. Это работает до сих пор.

Что не работает, так это while петля. Данные записываются в файл, но цикл продолжается вечно, хотя передача (Teensy->RPi) уже остановлена. Для этого случая я реализовал timeout=1, но, кажется, игнорируется. Программа не выходит из цикла while.

Кто-нибудь может помочь? Заранее спасибо!

1 ответ

Решение

Тайм-аут не повлияет на цикл while. Это повлияет только на максимальное время, в течение которого каждый звонок read() или же readline() будет ждать. Если вы хотите прекратить зацикливание, когда вы больше не получаете данные, тогда прекратите зацикливание, когда вы больше не получаете данные. Например, что-то вроде этого:

while True:
    dbstr = ser.readline()
    fo.write(str(dbstr));
    if not dbstr:
        break
Другие вопросы по тегам