Используя PySerial, можно ли ждать данных?

у нас есть программа на Python, которая читает данные из последовательного порта черезPySerial модуль. Два условия, которые я должен иметь в виду: я неЯ не знаю, сколько данных получит, и я нене знаю, когда ожидать данные.

Исходя из этого, я придумал следующие фрагменты кода:

#Code from main loop, spawning thread and waiting for data
s = serial.Serial(5, timeout=5)  # Open COM5, 5 second timeout
s.baudrate = 19200

#Code from thread reading serial data
while 1:
  tdata = s.read(500)    # Read 500 characters or 5 seconds

  if(tdata.__len__() > 0):        #If we got data
    if(self.flag_got_data is 0):  #If it's the first data we recieved, store it
      self.data = tdata        
    else:                         #if it's not the first, append the data
      self.data += tdata
      self.flag_got_data = 1

Таким образом, этот код будет зацикливаться на получение данных от последовательного порта. Мы'Вы получите до 500 символов для хранения данных, а затем оповестите основной цикл, установив флаг. Если данных нет, мыЯ просто пойду спать и подожду.

Код работает, но я неТ как тайм-аут 5с. Мне это нужно, потому что я нене знаю, сколько данных ожидать, но я неэто не нравитсяs просыпается каждые 5 секунд, даже если нет данных.

Есть ли способ проверить, когда данные становятся доступными, прежде чем делатьread? Я'я думаю что-то вродеselect Команда в Linux.

РЕДАКТИРОВАТЬ:

Просто думал, что яотмечу, что нашелinWaiting() метод, но на самом деле это, кажется, просто изменить мой "спать" на опрос, так чтоне то, что я хочу здесь. Я просто хочу поспать, пока данные не придут, а потом иди за ними.

Ответы на вопрос(3)

Ваш ответ на вопрос