twisted python: pausing a serial port read(扭曲的蟒蛇:暂停串口读取)
本文介绍了扭曲的蟒蛇:暂停串口读取的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
目标是从一个可以工作的串口读取,但因为这是一个RFID读取器,所以用户可能不会在另一个读取被缓冲之前及时移动。这会导致重复(或更多)条目。因此,我需要清除所有缓冲条目,并让它休眠几秒钟。
问题是实现休眠功能和刷新输入缓冲区的"扭曲"方式是什么?
class ReaderProtocol(LineOnlyReceiver):
def connectionMade(self):
log.msg("Connected to serial port")
def lineReceived(self, line):
line = line.decode('utf-8')
log.msg("%s" % str(line))
time.sleep(2) # pauses, but still prints whats in buffer
...
log.startLogging(sys.stdout)
serialPort = SerialPort(ReaderProtocol, "/dev/ttyAMA0", reactor, 2400)
reactor.run()
编辑:
以下是可行的解决方案
class ReaderProtocol(LineOnlyReceiver):
t, n = 0, 0
def __init__(self):
self.t = time.time()
def connectionMade(self):
log.msg("Connected to serial port")
def lineReceived(self, line):
self.n = time.time()
if self.n > self.t + 2:
line = line.decode('utf-8')
log.msg("%s" % str(line))
self.t = self.n
...
log.startLogging(sys.stdout)
serialPort = SerialPort(ReaderProtocol, "/dev/ttyAMA0", reactor, 2400)
reactor.run()
推荐答案
您不能"刷新"输入缓冲区。刷新是您对写入操作所做的操作,即输出缓冲区。您正在尝试做的是忽略在特定时间范围内到达的重复消息。
那么为什么不干脆这么做呢?
不要试图用"缓冲区"做任何奇怪的事情,只需根据自收到最后一封邮件以来已有多长时间更改您处理邮件的方式。
正如您已经注意到的,调用time.sleep()
是没有帮助的,因为这只会导致整个程序暂停一段时间:来自串口的消息仍将备份。
这篇关于扭曲的蟒蛇:暂停串口读取的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:扭曲的蟒蛇:暂停串口读取
基础教程推荐
猜你喜欢
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 症状类型错误:无法确定关系的真值 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01