nfcpy:无法逃脱一会儿循环不断收听 nfcpy



我目前有一个python脚本,当标签通过ACR122U读取器传递时,我使用nfcpy来侦听和处理。最终目标是在扫描标签时侦听并键入标签的 UID。我已经让这部分工作了。

遇到的问题是,为了使程序在扫描第一个标签后不会结束,我包围了以下行 - 它启动读取器并使其侦听标签 - 包围在while true循环中:

with nfc.ContactlessFrontend('usb') as clf: tag = clf.connect(rdwr=rdwr_options)

但是,点击^C不会使程序在等待标记时退出。当上述行未包含在 while 循环中时,终止程序确实有效。

我尝试将其包装在try块中并添加键盘中断异常,但这没有任何作用。

这是我到目前为止的代码:

import nfc
import time
import os
def typestr(text,returnatend):
    totype = text
    if returnatend=="false":
        cmd = """osascript -e 'tell application "System Events"' -e 'delay 0.1' -e 'keystroke "%s"' -e 'end tell' -e 'delay 2.0'""" % totype
    else:
        cmd = """osascript -e 'tell application "System Events"' -e 'delay 0.1' -e 'keystroke "%s"' -e 'delay 0.1' -e 'key code 36' -e 'end tell' -e 'delay 2.0'""" % totype
    os.system(cmd)
def notification_osx(text,title,subtitle):
    cmd = """osascript -e 'display notification "%s" with title "%s" subtitle "%s"'""" % (text, title, subtitle)
    os.system(cmd)
def on_startup(targets):
    for target in targets:
        target.sensf_req = bytearray.fromhex("0012FC0000")
    return targets
def on_connect(tag):
    print("printing tag")
    print(tag)
    print("printing uid")
    uid = str(tag.identifier).encode("hex").upper()
    typestr(uid,"false")
    notification_osx(uid,"Scanned Card", "Scanned a card with ID:")

rdwr_options = {
    'on-startup': on_startup,
    'on-connect': on_connect,
    'beep-on-connect': False,
}
while True:
    with nfc.ContactlessFrontend('usb') as clf:
        tag = clf.connect(rdwr=rdwr_options)

clf.connect 方法在被 Ctrl-C 打断时返回False。您的代码应计算返回值,并在tag is False时中断循环。这记录在 ContactlessFrontend.connect 描述末尾的返回值下。

相关内容

  • 没有找到相关文章

最新更新