Python nfcpy:Can';不要逃避使用nfcpy持续收听的while循环
我目前有一个python脚本,当标签通过ACR122U读取器时,我使用nfcpy侦听和处理该脚本。最终目标是在扫描标记时侦听并键入标记的UID。我已经让那部分工作了 我遇到的问题是,为了使程序在扫描第一个标记后不结束,我将以下行包围起来-这将启动读卡器并使其侦听标记-包围在Python nfcpy:Can';不要逃避使用nfcpy持续收听的while循环,python,nfc,keyboardinterrupt,Python,Nfc,Keyboardinterrupt,我目前有一个python脚本,当标签通过ACR122U读取器时,我使用nfcpy侦听和处理该脚本。最终目标是在扫描标记时侦听并键入标记的UID。我已经让那部分工作了 我遇到的问题是,为了使程序在扫描第一个标记后不结束,我将以下行包围起来-这将启动读卡器并使其侦听标记-包围在while true循环中: 将nfc.无触点前端(“usb”)作为clf: tag=clf.connect(rdwr=rdwr_选项) 但是,在程序等待标记时,点击^C不会使程序退出。当上述行没有被while循环包围时,它可
while true
循环中:
将nfc.无触点前端(“usb”)作为clf:
tag=clf.connect(rdwr=rdwr_选项)
但是,在程序等待标记时,点击^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)
当使用Ctrl-C中断时,
clf.connect
方法返回False
。如果标记为False,则代码应计算返回值并中断循环。这记录在描述末尾的返回值下。当使用Ctrl-C中断时,clf.connect
方法返回False
。如果标记为False,代码应计算返回值并中断循环。这记录在描述末尾的返回值下。提供一个。@aryamccarthy添加了我的源代码,它非常小。提供一个。@aryamccarthy添加了我的源代码,它非常小。嗨,Stephen,谢谢你的帮助。我已经像这样实现了你的建议:而True:nfc.ContactlessFrontend('usb')作为clf:tag=clf.connect(rdwr=rdwr_选项)如果tag==False:break
,但是当我这样做时,需要按两下^C
键才能退出,但前提是标签已经被扫描过。好奇您是否有任何想法?系统地排除其他因素可能会带来进一步的见解。请尝试禁用osascript命令调用,以查看这是否会产生影响。请注意,如果不希望在同一标记靠近读取器时反复识别该标记,则on_connect应返回True。请参阅Hi Stephen上的文档,谢谢您的帮助。我已经像这样实现了你的建议:而True:nfc.ContactlessFrontend('usb')作为clf:tag=clf.connect(rdwr=rdwr_选项)如果tag==False:break
,但是当我这样做时,需要按两下^C
键才能退出,但前提是标签已经被扫描过。好奇您是否有任何想法?系统地排除其他因素可能会带来进一步的见解。请尝试禁用osascript命令调用,以查看这是否会产生影响。请注意,如果不希望在同一标记靠近读取器时反复识别该标记,则on_connect应返回True。请参阅位于的文档