Python-escpos, как найти конкретный принтер с принтером. Usb - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь печатать на принтере EPSON TM-20II, но мне нужно иметь возможность печатать на двух разных принтерах одной и той же модели.Я не могу отфильтровать поиск USB по значениям шины или адреса, он просто печатает на том же самом.Хотя я могу отлично печатать, поэтому у меня нет проблем с какой-либо библиотекой, может быть, я путаюсь с методом printer.Usb из поведения библиотеки python-escpos.

Я попытался перечислить все свои принтеры, получил vendorId,productId, шина и адрес каждого принтера, но когда я пытаюсь найти свой принтер по всем этим фильтрам, он просто печатает на том же принтере, который соответствует vendorId и productId, не используя адрес или шину.Я отключил принтер, который был найден, и он прекрасно использует второй.

Во-первых, это код для получения всех принтеров:


def getAllPrinters():
    dev = usb.core.find(find_all=1)
    # loop through devices, printing vendor and product ids in decimal and hex
    for cfg in dev:
        sys.stdout.write('Hexadecimal VendorID=' + hex(cfg.idVendor) + ' & ProductID=' + hex(cfg.idProduct) + '\n')
        sys.stdout.write("Address=" + str(cfg.address) + '\n')
        sys.stdout.write("Bus=" + str(cfg.bus) + '\n'+"\n")

С этим кодом я получилэти выходные данные:

Hexadecimal VendorID=0x8086 & ProductID=0xa12f
Address=1
Bus=1

Hexadecimal VendorID=0x408 & ProductID=0xa060
Address=3
Bus=1

Hexadecimal VendorID=0x408 & ProductID=0xa060
Address=3
Bus=1

Hexadecimal VendorID=0x4ca & ProductID=0x3016
Address=2
Bus=1

Hexadecimal VendorID=0x4b8 & ProductID=0xe15
Address=16
Bus=1

Hexadecimal VendorID=0x4b8 & ProductID=0xe15
Address=17
Bus=1

Эти принтеры с VendorID = 0x4b8 и ProductID = 0xe15 являются моими принтерами EPSON TM-20II.

Это то, что я делаю для печати на определенном принтерево-первых, по крайней мере, я думаю, что это делает:

def printInvoiceFooter():
    p = printer.Usb(0x04b8,0xe15, profile="TM-T88III",address=17,bus=1)

    p.set(align="center")

    prevConfig = open("invoiceConfig.txt","rb")
    config = pickle.load(prevConfig)

    footerText = config["footerText"]
    headerText = config["headerText"]

    p.text(headerText + "\n")
    p.text(footerText)

    p.cut()

И не важно, размещаю я или нет адрес и метки шины:

#This
p = printer.Usb(0x04b8,0xe15, profile="TM-T88III",address=17,bus=1)
#Does the same thing as this
p = printer.Usb(0x04b8,0xe15, profile="TM-T88III")

Он просто печатает на одном и том же.

Я ожидал, что, если я размещу адрес и теги шины на printer.Usb (), он попытается подключить принтер к этой шине и адресу, который соответствует этому поставщику, но он просто получит первый, который соответствуетпродавец и печатает на этом.

...