Kann man mit PySerial auf Daten warten?

Ich habe ein Python-Programm, das Daten von einer seriellen Schnittstelle über das liestPySerial Modul. Die beiden Bedingungen, an die ich denken muss, sind: Ich weiß nicht, wie viele Daten ankommen werden, und ich weiß nicht, wann ich mit Daten rechnen soll.

Darauf aufbauend habe ich mir folgende Code-Snipets ausgedacht:

#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

Dieser Code wird also eine Endlosschleife durchlaufen, um Daten von der seriellen Schnittstelle abzurufen. Wir werden die Daten mit bis zu 500 Zeichen speichern und dann die Hauptschleife durch Setzen eines Flags benachrichtigen. Wenn keine Daten vorhanden sind, schlafen wir wieder ein und warten.

Der Code funktioniert, aber ich mag das 5s-Timeout nicht. Ich brauche es, weil ich nicht weiß, wie viele Daten zu erwarten sind, aber ich mag es nicht, dass es alle 5 Sekunden aufwacht, auch wenn keine Daten vorhanden sind.

Gibt es eine Möglichkeit zu überprüfen, wann Daten verfügbar sind, bevor Sie dies tun?read? Ich denke so etwas wie dasselect Befehl in Linux.

BEARBEITEN:
Ich dachte, ich würde feststellen, dass ich das gefunden habeinWaiting() Methode, aber wirklich scheint es, dass es nur meinen "Schlaf" in eine Umfrage verwandelt, also ist es nicht das, was ich hier will. Ich möchte nur schlafen, bis Daten eingehen, und dann gehen und sie holen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage