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.