Usando PySerial é possível esperar por dados?
Eu tenho um programa python que está lendo dados de uma porta serial através doPySerial
módulo. As duas condições que preciso ter em mente são: não sei quantos dados serão gerados e não sei quando esperar dados.
Com base nisso, desenvolvi os seguintes snipets de código:
#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
Portanto, esse código fará um loop para sempre, obtendo dados da porta serial. Obteremos até 500 caracteres para armazenar os dados e, em seguida, alertaremos o loop principal definindo um sinalizador. Se nenhum dado estiver presente, voltaremos a dormir e esperaremos.
O código está funcionando, mas não gosto do tempo limite de 5s. Eu preciso disso porque não sei quantos dados esperar, mas não gosto que ele acorde a cada 5 segundos mesmo quando não há dados presentes.
Existe alguma maneira de verificar quando os dados ficam disponíveis antes de fazer oread
? Estou pensando em algo como oselect
comando no Linux.
EDITAR:
Apenas pensei em notar que eu encontrei oinWaiting()
método, mas realmente parece que apenas mudar o meu "sono" para uma enquete, então não é isso que eu quero aqui. Eu só quero dormir até que os dados cheguem, então vá buscá-los.