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

时间:2015-03-06 18:14:41

标签: python pyserial

我创建了一个线程,将来自主机的传入串行数据“放入”队列对象。主机发送可变长度的ascii字符,这些字符以回车符/换行符结束。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

队列会传输任何对象,因为每次交易都很昂贵,所以通过它传输字符串会更好。即在满足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