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