在中国热敏打印机58mm上的python escpos pyusb,libusb中,Python未实现异常在Windows 10中工作

问题描述

不只是问题,而是答案。我有一台58mm的收据打印机,并且尝试使用escpos sdk进行设置,到目前为止,我花了整整一天的时间来获取冗余错误,例如“未实现”引发错误,并且关于它的信息并不多。因此,我将发布我所做的工作以使其正常工作。

首先,阅读this guide的第一步,并从依赖关系步骤安装所有库(我使用anaconda来管理我的虚拟环境,因此我是通过anaconda提示符安装的)

然后,从最新的Windows二进制文件中的here下载libusb,解压缩并根据您的OS搜索32或64位dll(显然,这对于工作很重要),对于64位,请选择MS64 / dll文件并将其复制到Windows / system32中,对于Windows / SYSWOW64中的32位MS32 / dll文件文件夹路径应位于Windows配置中的%PATH%变量中。如果您正在使用anaconda并激活虚拟环境,则将其复制到“ X:\ USERS \ USER \ Anaconda3 \ envs \ ENV \ DLLs”和“ X:\ USERS \ USER \ Anaconda3 \ envs \ ENV \ Library \ bin”中x,user和env应该与您的虚拟环境路径文件夹匹配,(如果您为所有用户安装了anaconda,则用户应位于“ all users”文件夹中,并且认情况下处于隐藏状态)

在python中运行此代码,将提示您所有设备vid和pid的列表,如果您需要搜索pid和vid(仅4位数字),则需要选择打印机vid和pid。调查每个人以找到您的打印机ID,并在获得这些信息后将其存储在某处。注意,如果在安装驱动程序后执行此操作,则可能看不到打印机在此处列出。对于我来说是VID_0483&PID_070B。

import win32com.client

wmi = win32com.client.Getobject ("winmgmts:")
for usb in wmi.InstancesOf ("Win32_USBHub"):
print(usb.deviceid)

获取Zadig并安装它,安装后打开它并选择clic选项菜单,然后列出所有设备(如果您不这样做,您将看不到任何设备),然后搜索您的设备,我的列在“ Usb打印支持”下,选择它,确认pid和vid供应商与您的匹配,然后选择WinUsb驱动程序,然后按安装/重新安装按钮,应该花点时间(耐心)。

这时,您应该完成库和驱动程序的安装,并且应该没有问题地运行此代码,并获得类似这样的

import usb.core
import usb.util
import usb.backend.libusb1
backend = usb.backend.libusb1.get_backend()
print(backend)

这是棘手的部分。如果运行此代码

from escpos.printer import Usb
import usb.core
import usb.util
import usb.backend.libusb1

p = Usb(0x0483,0x070B,0x81,0x02)
p.text("Hello World            Hola   1\n")

由于escpos库不是为Windows编写的,因此通常会出现“未实现”的引发错误! :/。因此,回到您的env文件夹或python安装文件夹,转到ENV / lib / site-packages / escpos /并打开printer.py文件。从第61行到71注释或删除它,但是如果您像我一样是新手,只需在每行中键入#。应该在同一列中,以避免标识错误。在“ check_driver = None”行下方和第73行上方执行此操作,

        check_driver = None

    #try:
    #    check_driver = self.device.is_kernel_driver_active(0)
    #except NotImplementedError:
    #    pass

    #if check_driver is None or check_driver:
    #    try:
    #        self.device.detach_kernel_driver(0)
    #    except usb.core.USBError as e:
    #        if check_driver is not None:
    #            print("Could not detatch kernel driver: {0}".format(str(e)))

    try:
        self.device.set_configuration()
        self.device.reset()
    except usb.core.USBError as e:
        print("Could not set configuration: {0}".format(str(e)))

def _raw(self,msg):

然后您应该可以与您的打印机通信。再次运行:

from escpos.printer import Usb
import usb.core
import usb.util
import usb.backend.libusb1

#remember to change pid and vid with your own values!
p = Usb(0x0483,0x02)
p.text("Hello World            Hola   1\n")

您应该在打印机中看到一台行式打印机!,您可能需要按进纸按钮才能看到它。如果得到无效的端点,则需要在vid和pid(0x81,0x02)旁边的Usb()参数函数中设置自己的端点,然后替换它们。通常为0x81和0x82,但可能会有所不同。

我希望您能从中获得有用的信息,加油!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)