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

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

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

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

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

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

**РЕДАКТИРОВАТЬ:**  
Просто подумал, что заметил, что нашел`inWaiting()` метод, но на самом деле это, кажется, просто меняет мой «сон» на опрос, так что это не то, что я хочу здесь. Я просто хочу поспать, пока данные не придут, а потом иди за ними.

 я действительно собрал что-то, что мне нравится для этого. Используя комбинацию`read()` без тайм-аута и тому`inWaiting()` метод:

Кажется, это дает желаемые результаты, я полагаю, что этот тип функциональности не существует как отдельный метод в Python



`timeout = None`тогда`read` Вызов будет заблокирован, пока не будет запрошенное количество байтов. Если вы хотите дождаться прибытия данных, просто выполните`read(1)` с таймаутом`None`, Если вы хотите проверить данные без блокировки, сделайте`read(1)` с нулевым временем ожидания, и проверьте, возвращает ли он какие-либо данные.

(см. документацию<http://pyserial.sourceforge.net/pyserial_api.html>)



Назовите это так: