我有一个 Python 程序,它通过PySerial模块从串行端口读取数据。我需要记住的两个条件是:我不知道有多少数据会到达,我不知道什么时候会收到数据。
基于此,我想出了以下代码片段:
#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
因此,此代码将永远循环从串行端口获取数据。我们将获得多达 500 个字符来存储数据,然后通过设置一个标志来提醒主循环。如果没有数据存在,我们将回到睡眠状态并等待。
代码正在运行,但我不喜欢 5s 超时。我需要它,因为我不知道需要多少数据,但我不喜欢它每 5 秒醒来一次,即使没有数据存在。
有什么方法可以在执行之前检查数据何时可用read
?我正在考虑类似于select
Linux中的命令。
注意:我找到了该inWaiting()
方法,但实际上这似乎只是将我的“睡眠”更改为投票,所以这不是我想要的。我只想睡觉,直到数据进来,然后去拿它。