编辑:我忘了说清楚我正在使用 python 和 pycups。代码是 python,但我不应该认为这就足够了。
我已经翻阅了杯子文档几次,但找不到任何可以执行此操作的内容。成功打印后是否返回任何可以捕获的消息?
例如在这段代码中:
import os
import cups
conn = cups.Connection()
f = open('testreceipt.txt', 'w')
f.write('something')
f.close()
printer_returns = conn.printFile('EPSON_TM-P2.01', 'testreceipt.txt', 'test', {})
print printer_returns
所有 print_returns 被分配的似乎都是打印作业 ID (208,209,...,n)。无论是否连接打印机,都会发生这种情况,因此不能依赖进行确认。
在这种情况下,目标打印机是收据打印机,通过串行-> USB 电缆连接到运行 raspbian 的树莓派。
我考虑过监视 cups 日志文件以获取成功的打印,但这似乎是一个糟糕的方法。
我不知道还能去哪里寻找解决方案,所以如果有人有想法,请分享。
答案1
我正在使用 getJobs 来验证作业是否已发送到打印机。
printid = conn.printFile('EPSON_TM-P2.01', 'testreceipt.txt', 'test', {})
while conn.getJobs().get(printid, None) is not None:
time.sleep(1)
答案2
你可以等到
conn.getJobAttributes(printer_returns)["job-state"]
等于 9 (IPP_JOB_COMPLETED)
答案3
发送文档后,检查cupsLastErrorString
.如果它为空,那么你应该很好。此外,大多数函数应该告诉您它是否失败,因为它们返回一个整数。
答案4
我相信 pycups 中的等价物是IPP错误类(请注意try / except
示例代码),因为cupsLastError*
中的函数cups
返回 IPP 错误代码。
检查子进程的状态代码也应该可以工作,但如果pycups
直接给你代码,似乎是不必要的开销。