扭曲的蟒蛇:暂停串口读取

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()是没有帮助的,因为这只会导致整个程序暂停一段时间:来自串口的消息仍将备份。

这篇关于扭曲的蟒蛇:暂停串口读取的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)