更新

更新

如何仅使用命令(无 GUI)检查杯子打印机是否缺纸。

编辑:是否可以使用 python 检查这一点?

EDIT2:我用不同的打印机(EPSON TM-m30)尝试过。当我尝试无纸打印时,它卡在“处理中”。

printer-state = processing
printer-state-message = Rendering completed
printer-state-reasons = none

但我仍然无法获取有关纸张的信息。

我不确定它是否可以帮助你,我从一些读取打印机属性的Python代码创建了json文件:https://pastebin.com/u97U9TnQ

更新

我们购买了另一台打印机(Star Micronics TUP542),打印机有缺纸传感器:纸张将尽传感器,但我找不到任何如何使用该传感器的手册(传感器已插入打印机)。 cups 有一些命令吗?或者我需要使用一些不同的工具?

我尝试使用 python 获取属性,这是结果(json):https://pastebin.com/Z3Tiz5g9

顺便提一句,打印机状态总是3,无论有没有纸。当打印机缺纸时它应该改变吗?我认为打印机状态原因应该说一些关于丢失纸张的事情,但总是有['none']

更新2

也许我应该尝试 ESC/POS 命令(这里)。我在157页找到了一些代码状态传输

n = 1, 49:发送纸张检测器状态

但我不确定它是什么意思n = 1, 49是字符串、十进制还是十六进制值?为什么1和49之间有逗号。

我尝试了这个Python代码:

command = [0x1D, 0x72, 1]
dest="/dev/usb/lp1"

with open(dest,"wb") as file:
    file.write(bytearray(command))

with open(dest,"rb") as file:
    data = file.read() # hangs
    print(data)

但 read 函数挂起并且永远不会返回。

PS:我也尝试了不同的值([0x1D, 0x72, 49][0x1D, 0x72, 1, 49][0x1D, 0x72, 1, 0x49]),但没有成功。

顺便说一句,当我使用sudo cat /dev/usb/lp1它时,它会打印很多###。

当我在 cat 之后使用 hexdump 时,我看到这个重复序列:23 06 00 00 00 00 00 00 00

答案1

你看过吗参数统计

例如,获取打印机列表:

~$ lpstat -s

device for Canon_MX920_series: dnssd://Canon%20MX920%20series._ipp._tcp.local/?uuid=00000000-0000-1000-8000-xxxxxxxxxxxx

然后查询有问题的打印:

~$ lpstat -p "Canon_MX920_series"

printer Canon_MX920_series is idle.  enabled since Tue 18 Jan 2022 10:49:40 AM CST
scheduler is running

答案2

您可以使用子流程模块使用Python运行参数统计命令并解析输出以确定打印机的状态。

以下是如何执行此操作的示例:

import subprocess

def is_printer_out_of_paper(printer_name):
    # Run the lpstat command to get the printer's status
    output = subprocess.run(["lpstat", "-p", printer_name, "-l"], capture_output=True).stdout.decode()

    # Check if the output contains the "out of paper" message
    return "out of paper" in output

# Example usage
if is_printer_out_of_paper("My Printer"):
    print("Printer is out of paper")
else:
    print("Printer has paper")

在这个例子中,我的打印机是打印机的名称,并且参数统计命令用于获取打印机的状态。这-p选项指定打印机名称,并且-l选项使 lpstat 命令以长格式列出打印机的状态。 lpstat 命令的输出是使用以下命令捕获的捕获输出选项然后使用以下方法解码为字符串stdout.decode()方法。然后在该字符串中搜索“缺纸”消息以确定打印机是否缺纸。

相关内容