À l'aide de PySerial est-il possble d'attendre que les données?

J'ai un programme en python qui est de la lecture des données à partir d'un port série via le PySerial module. Les deux conditions que j'ai besoin de garder à l'esprit: je ne sais pas la quantité de données à arive, et je ne sais pas quand s'attendre à des données.

Basé sur ce que j'ai est venu avec le code ci-dessous snipets:

#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

Donc ce code en boucle pour toujours obtenir les données sur le port série. Nous allons obtenir jusqu'à 500 caractères stocker les données, puis d'alerte de la boucle principale par un indicateur. Si aucune donnée n'est présente, nous allons juste aller de nouveau au sommeil et d'attendre.

Le code fonctionne, mais je n'aime pas le 5s délai d'attente. J'en ai besoin car je ne sais pas quelle quantité de données à attendre, mais je n'aime pas qu'il se réveille toutes les 5 secondes, même lorsque aucune donnée n'est présente.

Est-il de toute façon à vérifier si les données deviennent disponibles avant de faire la read? Je suis en train de penser à quelque chose comme le select de commande sous Linux.

EDIT:
Juste pensé que je remarque que j'ai trouvé le inWaiting() méthode, mais vraiment que semble qu'il suffit de changer mon "sommeil" à un sondage, donc ce n'est pas ce que je veux ici. J'ai juste envie de dormir, jusqu'à ce que des données, puis d'aller la chercher.

OriginalL'auteur Mike | 2012-10-22