首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyscard没有列出读者

Pyscard没有列出读者
EN

Stack Overflow用户
提问于 2014-09-06 11:29:22
回答 1查看 2.8K关注 0票数 1

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

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
>>> ================================ 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 32设备下的设备管理器中时,它没有列出阅读器?我应该把Libusb移走吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-11 06:54:49

您之所以看不到代码中的读者,是因为您在这里混合了两种方法:

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

libusb是一个直接访问USB设备的库,所以如果让libusb的USB驱动程序管理读取器,还需要使用libusb接口库从程序中访问读取器。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25699768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档