从队列中解析 PySerial 数据并在命令匹配时执行函数

Parsing PySerial Data from queue and executing function on command match

我创建了一个线程,该线程 'puts' 将来自主机的串行数据传入队列对象。主机发送可变长度的 ascii 字符,这些字符以回车 return/line 提要结束。

在主循环线程中,我以这种方式获取数据:

try:
     while True:
        qCount = list( self.dataQ.get_nowait( ) )
except queue.Empty:
    raise StopIteration

但是我不想手动获取队列中的每个字符以形成一个字符串,然后与有效命令列表进行比较。我如何将队列内容视为一个字符串并进行比较?

我从 'c' 背景中学习 python.. 在 'c' 的世界里,我会创建一个结构类型的数组,它有一个字符串元素和一个函数指针元素。当它 strncmp 每个元素时,如果它匹配它将执行关联的函数指针。做类似事情的 pythonic 方法是什么?

队列会传输任何对象,并且由于每笔交易的成本都很高,因此最好通过它传输字符串。 IE。当满足 CRLF 时,从串行收集字符并放入队列字符串。

然后,在接收端,您可以直接从您将获得的项目中检测命令,因为它是完整的字符串。根据命令界面的设计,有很多方法可以完成您用 "C" 类比描述的内容。但在最简单的情况下,它可能只是字典:

cmds = {}
cmds['name1'] = func1

try:
     while True:
        str = self.dataQ.get_nowait()
        cmd_name, cmd_params = str.split(' ', 1)
        try:
            res = cmds[cmd_name](cmd_params)
        except:
            ## command not found
            pass 
except queue.Empty:
    raise StopIteration