При использовании text () с python -escpos я получаю [Errno None] и ключевую ошибку = 1 (windows 10) - PullRequest
1 голос
/ 11 июля 2020

Я пытаюсь распечатать на термопринтере 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 по умолчанию. Когда я запускаю этот код, я получаю следующую ошибку:

Эта ошибка возникает, только когда я добавляю p.text(). Найти принтер и все остальное не проблема. Я также хочу сказать, что write() работает в модуле PyUSB, но мне было бы намного удобнее не переводить выходные данные в моей программе на запутанный язык ESC / P.

Я с использованием Spyder 4 с 64-разрядной версией anaconda (python 3.7), libusb 1.0.22b9, самой последней версией pyusb на github (версия PyPi имеет нереализованную ошибку) и python -escpos 3.0a8. Я считаю, что все они тоже 64-битные. У меня есть libusb1.dll из папки 64x в моем System32 и 86x в SysWoW64, как рекомендовано. У меня также установлен Usbdk. Пожалуйста, дайте мне знать, если у вас есть идеи, которые нужно исправить, или если вам нужны дополнительные сведения. Уже неделю гуглил.

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Разве это не проблема с настройкой режима USB принтера? Принтер TM-T20II имеет режимы класса USB, определенного поставщиком (COM-порт), и класса USB-принтера. VID / PID - это определяемый поставщиком USB класс = 0x04b8: 0x0202 и класс USB-принтера = 0x04b8: 0x0e15 соответственно.

Техническое справочное руководство TM-T20II стр. 89

Вы сможете изменить его с помощью утилиты настройки принтера. В качестве альтернативы, попробуйте изменить обозначение PID на 0x0202 как есть или попробуйте установить связь через COM-порт, а не как обычное USB-устройство.

Или возможно, что расширенный драйвер принтера или Windows диспетчер очереди печати уже использует устройство, и другие программы использовать нельзя. Если драйвер устройства установлен, попробуйте удалить его.

0 голосов
/ 12 июля 2020

Для всех, у кого такая же проблема, как у меня, я установил драйвер виртуального порта Epson TM и настроил принтер на COM-порт. Затем мне пришлось ввести go в настройки принтера и вручную изменить порт на виртуальный. Затем я изменил свой код на этот:

from escpos import printer



pr = printer.Serial('COM2')


data= '''
hello world
'''

pr.text(data)
pr.close()

И, наконец, это сработало! Как видите, я немного урезал свой код. Оказывается, мне даже не нужно менять бэкэнд. Странно, что Usb не работает, а серийник работает. Но пока это работает! Спасибо kunif за руководство к моему решению, никогда даже не думал о проверке последовательных портов.

...