gpt4 book ai didi

python - Pyscard 未能列出读者

转载 作者:行者123 更新时间:2023-12-01 05:02:49 28 4
gpt4 key购买 nike

我有一个 ACR38 阅读器,并且使用 Python2.7。我搜索了使用 python 与读者通信的方法,最后找到了下面的代码 here

import sys
sys.path.append('D:\PythonX\Lib\site-packages')
from smartcard.scard import *
import smartcard.util

SELECT = [0x00, 0xA4, 0x04, 0x00, 0x0A, 0xA0, 0x00, 0x00, 0x00, 0x62,
0x03, 0x01, 0x0C, 0x06, 0x01]
COMMAND = [0x00, 0x00, 0x00, 0x00]

try:
hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)
if hresult != SCARD_S_SUCCESS:
raise Exception('Failed to establish context : ' +
SCardGetErrorMessage(hresult))
print 'Context established!'

try:
hresult, readers = SCardListReaders(hcontext, [])
if hresult != SCARD_S_SUCCESS:
raise Exception('Failed to list readers: ' +
SCardGetErrorMessage(hresult))
print 'PCSC Readers:', readers

if len(readers) < 1:
raise Exception('No smart card readers')

reader = readers[0]
print "Using reader:", reader

try:
hresult, hcard, dwActiveProtocol = SCardConnect(hcontext, reader,
SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)
if hresult != SCARD_S_SUCCESS:
raise Exception('Unable to connect: ' +
SCardGetErrorMessage(hresult))
print 'Connected with active protocol', dwActiveProtocol

try:
hresult, response = SCardTransmit(hcard, dwActiveProtocol,
SELECT)
if hresult != SCARD_S_SUCCESS:
raise Exception('Failed to transmit: ' +
SCardGetErrorMessage(hresult))
print 'Select: ' + smartcard.util.toHexString(response,
smartcard.util.HEX)
hresult, response = SCardTransmit(hcard, dwActiveProtocol,
COMMAND)
if hresult != SCARD_S_SUCCESS:
raise Exception('Failed to transmit: ' +
SCardGetErrorMessage(hresult))
print 'Command: ' + smartcard.util.toHexString(response,
smartcard.util.HEX)
finally:
hresult = SCardDisconnect(hcard, SCARD_UNPOWER_CARD)
if hresult != SCARD_S_SUCCESS:
raise Exception('Failed to disconnect: ' +
SCardGetErrorMessage(hresult))
print 'Disconnected'

except Exception, message:
print "Exception:", message

finally:
hresult = SCardReleaseContext(hcontext)
if hresult != SCARD_S_SUCCESS:
raise Exception('Failed to release context: ' +
SCardGetErrorMessage(hresult))
print 'Released context.'

except Exception, message:
print "Exception:", message

import sys
if 'win32' == sys.platform:
print 'press Enter to continue'
sys.stdin.read(1)

但是当我运行代码时,我收到以下错误:

>>> ================================ RESTART ================================
>>>
Context established!
Released context.
Exception: Failed to list readers: Cannot find a smart card reader.
press Enter to continue

Traceback (most recent call last):
File "C:/Users/ghasemi.IT/Desktop/123", line 76, in <module>
sys.stdin.read(1)
AttributeError: read
>>> ================================ RESTART ================================

问:当我的阅读器位于设备管理器中的 libusb-win32 设备 下时,为什么无法列出阅读器?我应该删除 Libusb 吗?

最佳答案

您看不到读者的代码的原因是您在这里混合了两种方法:

  1. 您的代码尝试使用 pyscard,它是 PC/SC 接口(interface)的 Python 包装器。
  2. 您让 libusb 管理 ACR38 USB 设备。

libusb是一个直接访问USB设备的库,因此如果您让libusb的USB驱动程序管理读卡器,您还需要使用libusb接口(interface)库从您的程序中访问读卡器。

如果您想使用 pyscard (PC/SC),您还需要让 PC/SC 管理读卡器。在这种情况下,您需要为该读卡器安装 CCID 驱动程序,而不是 libusb 驱动程序。 ACS 提供 PC/SC driver package其中包含该读取器所需的驱动程序。

关于python - Pyscard 未能列出读者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25699768/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com