我正在尝试将一台POS收据打印机连接到python,并且一直在使用python-escpos来实现。我用的是Windows10。
我在文件'print.py‘中的代码是:
from escpos.printer import Usb
p = Usb(0x0456,0x0808)
p.text('Hello World\n')但是当我运行它时,我得到了以下错误日志:
Traceback (most recent call last):
File "C:\Users\Harry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\usb\core.py", line 223, in get_interface_and_endpoint
return self._ep_info[endpoint_address]
KeyError: 1在处理上述异常的过程中,发生了另一个异常:
Traceback (most recent call last):
File "print.py", line 5, in <module>
p.text('Hello World\n')
File "C:\Users\Harry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\escpos\escpos.py", line 437, in text
self._raw(txt.encode())
File "C:\Users\Harry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\escpos\printer.py", line 73, in _raw
self.device.write(self.out_ep, msg, self.timeout)
File "C:\Users\Harry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\usb\core.py", line 940, in write
intf, ep = self._ctx.setup_request(self, endpoint)
File "C:\Users\Harry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\usb\core.py", line 102, in wrapper
return f(self, *args, **kwargs)
File "C:\Users\Harry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\usb\core.py", line 215, in setup_request
intf, ep = self.get_interface_and_endpoint(device, endpoint_address)
File "C:\Users\Harry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\usb\core.py", line 102, in wrapper
return f(self, *args, **kwargs)
File "C:\Users\Harry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\usb\core.py", line 225, in get_interface_and_endpoint
for intf in self.get_active_configuration(device):
File "C:\Users\Harry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\usb\core.py", line 102, in wrapper
return f(self, *args, **kwargs)
File "C:\Users\Harry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\usb\core.py", line 239, in get_active_configuration
bConfigurationValue=self.backend.get_configuration(self.handle)
File "C:\Users\Harry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\usb\backend\libusb0.py", line 510, in get_configuration
100)
File "C:\Users\Harry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\usb\backend\libusb0.py", line 593, in ctrl_transfer
timeout
File "C:\Users\Harry\AppData\Local\Programs\Python\Python36-32\lib\site-packages\usb\backend\libusb0.py", line 431, in _check
raise USBError(errmsg, ret)
usb.core.USBError: [Errno None] b'libusb0-dll:err [control_msg] sending control message failed, win error: A device which does not exist was specified.\r\n\n'有没有人知道我需要做什么才能让它工作。我已经在我的System32和SysWOW64文件夹中安装了libusb,并使用zadig为我的打印机安装了libusb-32驱动程序。
我使用的打印机是'Hoin 58‘m打印机’。
如果有人能向我解释为什么我会有这个错误以及如何解决它,我将不胜感激!
发布于 2020-07-25 13:11:59
首先,您可以检查此link中是否有完整的线程。
建议的
,
当我试图在Windows7机器上遵循教程时,我遇到了同样的No backend available异常。根据其中一条StackOverflow回复,以下方法适用于我:
1.下载最新的Windows二进制文件:https://sourceforge.net/projects/libusb/files/libusb-1.0/libusb-1.0.21/libusb-1.0.21.7z/download 2.使用7zip解压到临时目录3.如果是64位Windows,请将MS64\dll\libusb-1.0.dll复制到C:\windows\system32中。如果在32位windows上,请将MS32\dll\libusb-1.0.dll复制到C:\windows\SysWOW64中。
我已经在Windows-10 64位版本的上验证了上述答案。
发布于 2020-12-10 20:12:48
我使用了至少3种不同的USB存储设备,对这个错误有过严格的体验。经过几个小时的试验,我最终感觉到USB传输错误是导致这个错误的原因。
对于低质量连接,USB总线将以随机模式返回它,就好像设备移除可能已经发生一样。
在我的场景中,我正在向\\.\PhysicalDriveN设备批量写入扇区,我注意到,在很短的一段时间后,连接重新建立,文件句柄仍然有效并且正在运行。
为了克服这个错误,我完成了以下步骤:
H118ERROR_NOT_READY >读取扇区,忽略和code错误,并在放弃之前重试最多1000 ms;如果matching;
Repeat整个过程高达5 times.
,我已经比较了输入缓冲区和读取缓冲区并停止
所以这里的想法是这样的:设备驱动程序返回ERROR_NO_SUCH_DEVICE,假设设备移除场景,但仍然处于挂起状态。由于问题仅仅是物理连接的质量,因此链路继续,总线驱动程序开始重新协商,在这种情况下,临时返回ERROR_NOT_READY。当链路稳定且经过协商后,通信将继续,而无需重新打开设备句柄。
发布于 2021-01-21 14:01:58
我建议在实例化USB打印机和尝试打印到它之间添加一到两秒的睡眠语句。例如:
from escpos.printer import Usb
from time import sleep
p = Usb(0x0456,0x0808)
sleep(1)
p.text('Hello World\n')https://stackoverflow.com/questions/60553035
复制相似问题