将text()与pythonescpos一起使用时,我得到[Errno None]和key error=1(windows 10)

2024-05-23 17:49:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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驱动程序。当我运行此代码时,得到的错误是:

<File "C:\Users\maxsl\anaconda3\lib\site-packages\usb\core.py", line 234, in get_interface_and_endpoint return self._ep_info[endpoint_address]

KeyError: 1

During handling of the above exception, another exception occurred:

File "C:\Users\maxsl\anaconda3\lib\site-packages\usb\backend\libusb1.py", line 604, in _check raise USBError(_strerror(ret), ret, _libusb_errno[ret])

USBError: [Errno None] Other error>

仅当我在中添加p.text()时,才会发生此错误。找到打印机和其他一切都没有问题。我还想说write()在PyUSB模块中工作,但对我来说,不必将程序中的输出翻译成令人困惑的ESC/P语言会更方便

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


Tags: fromcoreimportbackendlib错误打印机printer
2条回答

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

TM-T20II Technical Reference Guide第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不工作,但串行工作。只要它能工作!感谢kunif对我的解决方案的指导,我从未考虑过检查串行端口

相关问题 更多 >