我一直在尝试使用 Python 中的 win32print 获取打印作业的状态。
win32print 提供的状态代码似乎与相关作业的状态代码不匹配。我在不同的打印机上尝试过,但总是得到相同的结果。
import win32print
import subprocess
printer_name = win32print.GetDefaultPrinter()
print("Printer: %s" % (printer_name))
hPrinter = win32print.OpenPrinter(printer_name)
try:
hJob = win32print.StartDocPrinter(hPrinter, 1, ("test of raw data", None, "RAW"))
try:
f = open("test2.ps", "r")
win32print.StartPagePrinter(hPrinter)
win32print.WritePrinter(hPrinter, bytes(f.read(), "utf-8"))
win32print.EndPagePrinter(hPrinter)
finally:
win32print.EndDocPrinter(hPrinter)
finally:
print("Printing: %s" % (hJob))
win32print.ClosePrinter(hPrinter)
hPrinter = win32print.OpenPrinter(printer_name)
past_status_code = -0
while True:
try:
job = win32print.GetJob(hPrinter, hJob, win32print.JOB_INFO_1)
except:
break
status_code = job['Status']
if (status_code != past_status_code):
print("Job Status Code: %s" % (status_code))
past_status_code = status_code
if (job['Status'] == win32print.JOB_STATUS_BLOCKED_DEVQ):
print("BLOCKED_DEVQ")
if (job['Status'] == win32print.JOB_STATUS_DELETED):
print("Deleted")
if (job['Status'] == win32print.JOB_STATUS_DELETING):
print("Deleting")
if (job['Status'] == win32print.JOB_STATUS_ERROR):
print("Error")
if (job['Status'] == win32print.JOB_STATUS_OFFLINE):
print("Offline")
if (job['Status'] == win32print.JOB_STATUS_PAPEROUT):
print("PaperOut")
if (job['Status'] == win32print.JOB_STATUS_PAUSED):
print("Paused")
if (job['Status'] == win32print.JOB_STATUS_RESTART):
print("Restart")
if (job['Status'] == win32print.JOB_STATUS_USER_INTERVENTION):
print("User intervention")
if (job['Status'] == win32print.JOB_STATUS_SPOOLING):
print("Spooling")
if (job['Status'] == win32print.JOB_STATUS_PRINTING):
print("Printing")
if (job['Status'] == win32print.JOB_STATUS_PRINTED):
print("Printed")
if (job['Status'] == win32print.JOB_STATUS_COMPLETE):
print("Complete")
运行上面的脚本后,我总是得到相同的结果/状态代码,我似乎得到 8208 然后是 148。
我试图做的是检查工作何时完成。
最佳答案
你可以从这里开始:
此脚本允许您查看打印作业队列。您可以使用 Get Job documentation 自定义它如果您想查看特定作业的信息。
import time
import win32print
#----------------------------------------------------------------------
def print_job_checker():
"""
Prints out all jobs in the print queue every 5 seconds
"""
jobs = [1]
while jobs:
jobs = []
for p in win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL,
None, 1):
flags, desc, name, comment = p
phandle = win32print.OpenPrinter(name)
print_jobs = win32print.EnumJobs(phandle, 0, -1, 1)
if print_jobs:
jobs.extend(list(print_jobs))
for job in print_jobs:
print "printer name => " + name
document = job["pDocument"]
print "Document name => " + document
win32print.ClosePrinter(phandle)
time.sleep(5)
print "No more jobs!"
#----------------------------------------------------------------------
if __name__ == "__main__":
print_job_checker()
脚本取自 this post
关于Python Win32print 作业状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53765699/