当将text()与python escpos一起使用时,我得到[Erno None]和key error=1(windo



我正在尝试打印到TM-T20II热敏打印机,以便打印收据。这是我的代码:

from escpos import printer
from escpos import *
import escpos
from escpos import config
import usb.core
import usb.util
import usb.backend.libusb1
from ctypes import c_void_p, c_int
backend = usb.backend.libusb1.get_backend(find_library=lambda x: "libusb-1.0.dll")
backend.lib.libusb_set_option.argtypes = [c_void_p, c_int]
backend.lib.libusb_set_option(backend.ctx, 1)
p = printer.Usb(0x04b8,0x0e15,0,0x82,0x01, backend=backend)
p.text('test')

我使用的是usbdk后端,如果没有它,我会得到一个"NotImplementedError:此平台上不支持或未实现操作"我这么做是因为我的程序要运行,我需要使用默认的Epson驱动程序。当我运行此代码时,我得到的错误是:

<文件";C: \Users\maxsl\anaconda3\lib\site-packages\usb\core.py",线234,在get_interface_and_endpoint中回归自我_ep_info[endpoint_address]

KeyError:1

在处理上述异常的过程中,发生了另一个异常:

文件"C: \Users\maxsl\anaconda3\lib\site packages\usb\backend\libusb1.py",第604行,在_check中引发USBError(_strerror(ret(,ret,_libusb_errno[ret](

USBError:[Erno None]其他错误>

只有在中添加p.text()时才会出现此错误。查找打印机和其他一切都没有问题。我还想说write()在PyUSB模块中工作,但对我来说,不必将程序中的输出转换为令人困惑的ESC/P语言会方便得多。

我正在使用Spyder 4和anaconda(python 3.7(64位、libusb 1.0.22b9、github上最新的pyusb(PyPi版本出现未实现的错误(和python escpos 3.0a8。我相信它们都是64位的。我的System32中有64x文件夹中的libusb1.dll,SysWoW64中有86x文件夹。我还安装了Usbdk。如果你有任何想法需要解决,或者你需要更多的细节,请告诉我。我已经在谷歌上搜索了一个星期了。

打印机的USB模式设置不是有问题吗
TM-T20II打印机具有USB供应商定义类(COM端口(和USB打印机类的模式
VID/PID分别是USB供应商定义的class=0x04b8:0x0202和USB打印机class=0x04B 8:0x0e15。

TM-T20II技术参考指南第89页

您应该可以使用打印机的设置实用程序进行更改
或者,尝试按原样将PID指定更改为0x0202,或者尝试作为COM端口而不是原始USB设备进行通信。


或者可能是高级打印机驱动程序或Windows后台打印程序已经在使用该设备,而其他程序无法使用
如果安装了设备驱动程序,请尝试卸载它。

对于其他和我有同样问题的人,我安装了Epson的TM虚拟端口驱动程序,并将打印机设置为COM端口。然后,我必须进入打印机的设置,手动将端口更改为虚拟端口。然后我把我的代码改成这样:

from escpos import printer

pr = printer.Serial('COM2')

data= '''
hello world
'''
pr.text(data)
pr.close()

它终于成功了!你可以看到我把代码削减了很多。事实证明,我甚至不需要更改后端。奇怪的是,Usb不起作用,但serial起作用。只要它有效!感谢kunif对我的解决方案的指导,我甚至从未考虑过检查串行端口。

最新更新