背景:当扫码枪扫描达到输入的数量N时,自动调用打印机打印N个数据的二维码。
实现:因为需要一直监听扫码枪扫描数据的状态,因此创建线程。但是在调试的时候发现,扫码枪扫描的数据并不是一次性出来的,而是一个字符一个字符出现的。因此加入延时,每隔0.5秒读取数据接收区的数据,但是存在当刚好是0.5秒时,只接收到部分扫描的数据(并没有权保护接收完成),导致接收数据异常。
在网上找其他的监听扫码枪数据的实现方式,Python 监控扫码枪输入_python扫码枪_阿伟-_-的博客-CSDN博客,找到一个可复现的demo。
from pynput import mouse,keyboard
CODE = ""
# 处理键盘输入的数据
def on_release(key):
global CODE
try:
CODE += key.char
except Exception as e:
try:
if key == key.enter: #如果扫码枪中的数据是回车enter按键
if "http" in CODE:
message = CODE.replace("http;","http:")
print(message)
CODE = ""
except Exception as e:
CODE = ""
#监听键盘扫码枪输入
with keyboard.Listener(on_release=on_release) as listener:
listener.join()
if key == key.enter: #如果扫码枪中的数据是回车enter按键,说明是本次扫码数据接收完成,因为扫码枪一般是以回车作为结束符,或者是回车换行作为结束符。这样就可以接收到正确的扫码枪扫描的数据。