我创建了一个线程,将来自主机的传入串行数据“放入”队列对象。主机发送可变长度的ascii字符,这些字符以回车符/换行符结束。
在主循环线程中,我以这种方式抓取数据:
try:
while True:
qCount = list( self.dataQ.get_nowait( ) )
except queue.Empty:
raise StopIteration
但是我不想手动获取队列中的每个字符以形成字符串,然后与有效命令列表进行比较。如何将队列内容视为字符串并进行比较?
我正在从'c'背景学习python ..在'c'的世界中我会创建一个struct类型的数组,它有一个字符串元素和一个函数指针元素。因为strncmp每个元素,如果它匹配,它将执行相关的函数指针。做类似事情的pythonic方式是什么?
答案 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