【问题标题】:Pyusb on Windows 7 - NotImplemented Error :is_kernal_driver_activeWindows 7 上的 Pyusb - 未实现的错误:is_kernal_driver_active
【发布时间】:2017-06-10 18:32:38
【问题描述】:

我正在使用 escposprinter python 库在热敏打印机中打印我的数据。这取决于pyusb。该库在 linux 中运行良好。在 Windows 7 中,我知道它有一些问题。这是我得到的输出。

File "main.py", line 1, in <module>
    from app import app
  File "D:\freeth-in-erp-60ab8eb96fad\app\__init__.py", line 94, in <module>
    from .api_routes import *
  File "D:\freeth-in-erp-60ab8eb96fad\app\api_routes.py", line 44, in <module>
    from .printer import pos
  File "D:\freeth-in-erp-60ab8eb96fad\app\printer\pos.py", line 14, in <module>
    Epson = printer.Usb(idVendor=0x0416,idProduct=0x5011)
  File "D:\freeth-in-erp-60ab8eb96fad\venv\lib\site-packages\escposprinter\print
er.py", line 37, in __init__
    self.open()
  File "D:\freeth-in-erp-60ab8eb96fad\venv\lib\site-packages\escposprinter\print
er.py", line 46, in open
    if self.device.is_kernel_driver_active(0):
  File "D:\freeth-in-erp-60ab8eb96fad\venv\lib\site-packages\usb\core.py", line
1064, in is_kernel_driver_active
    interface)
  File "D:\freeth-in-erp-60ab8eb96fad\venv\lib\site-packages\usb\backend\__init_
_.py", line 365, in is_kernel_driver_active
    _not_implemented(self.is_kernel_driver_active)
  File "D:\freeth-in-erp-60ab8eb96fad\venv\lib\site-packages\usb\backend\__init_
_.py", line 81, in _not_implemented
    raise NotImplementedError(func.__name__)
NotImplementedError: is_kernel_driver_active

我从 libusb.info 下载 libusb-1.20 并从 MinGW32 复制文件 libusb-1.0.dll 并粘贴到“C:\windows\System32”。我得到以下结果。

   from app import app
  File "D:\freeth-in-erp-60ab8eb96fad\app\__init__.py", line 94, in <module>
    from .api_routes import *
  File "D:\freeth-in-erp-60ab8eb96fad\app\api_routes.py", line 44, in <module>
    from .printer import pos
  File "D:\freeth-in-erp-60ab8eb96fad\app\printer\pos.py", line 14, in <module>
    Epson = printer.Usb(idVendor=0x0416,idProduct=0x5011)
  File "D:\freeth-in-erp-60ab8eb96fad\venv\lib\site-packages\escposprinter\print
er.py", line 37, in __init__
    self.open()
  File "D:\freeth-in-erp-60ab8eb96fad\venv\lib\site-packages\escposprinter\print
er.py", line 46, in open
    if self.device.is_kernel_driver_active(0):
  File "D:\freeth-in-erp-60ab8eb96fad\venv\lib\site-packages\usb\core.py", line
1064, in is_kernel_driver_active
    interface)
  File "D:\freeth-in-erp-60ab8eb96fad\venv\lib\site-packages\usb\backend\libusb1
.py", line 898, in is_kernel_driver_active
    intf)))
  File "D:\freeth-in-erp-60ab8eb96fad\venv\lib\site-packages\usb\backend\libusb1
.py", line 593, in _check
    raise NotImplementedError(_strerror(ret))
NotImplementedError: Operation not supported or unimplemented on this platform

我的代码是 `

from escposprinter import *
from tabulate import tabulate

Epson = printer.Usb(0x0416,0x5011)

来自库 escposprinter

  class Usb(Escpos):
    """ Define USB printer """

    def __init__(self, idVendor, idProduct, interface=0, in_ep=0x82, out_ep=0x01):
        """
        @param idVendor  : Vendor ID
        @param idProduct : Product ID
        @param interface : USB device interface
        @param in_ep     : Input end point
        @param out_ep    : Output end point
        """
        self.idVendor  = idVendor
        self.idProduct = idProduct
        self.interface = interface
        self.in_ep     = in_ep
        self.out_ep    = out_ep
        self.open()


    def open(self):
        """ Search device on USB tree and set is as escpos device """
        self.device = usb.core.find(idVendor=self.idVendor, idProduct=self.idProduct)
        if self.device is None:
            print ("Cable isn't plugged in")

        if self.device.is_kernel_driver_active(0):
            try:
                self.device.detach_kernel_driver(0)
            except usb.core.USBError as e:
                print ("Could not detatch kernel driver: %s" % str(e))

帮我提出你的建议 `

【问题讨论】:

  • 甚至没有用谷歌搜索,对吧?
  • @linusg 不,我正在搜索过去 7 天

标签: windows python-3.5 libusb pyusb libusb-1.0


【解决方案1】:

问题很简单,检查内核驱动程序是否处于活动状态,这在 Windows 上是不可能的。看来这个库根本不是为在 Windows 上使用而编写的。

如果你从源代码中删除以if self.device.is_kernel_driver_active(0):开头的最后5行,或者预先检查代码是否在Windows上运行并且不要调用它们,你可以在Windows上使用它。

请记住,在 Windows 上,您需要安装自己的驱动程序。我建议使用 Zadig 创建和/或安装驱动程序。

【讨论】:

  • 我修好了。因为错误出在库 escposprinter 上。谢谢
猜你喜欢
  • 2011-07-20
  • 2013-08-20
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 2015-11-04
相关资源
最近更新 更多