Python监控打印机队列
很久之前做过自动化打印资料的工具,一直也还算稳定,但是最近突然出现很多size特别的文件,导致原本文件顺序正常的输出变成了极其混乱的状态。
今天用Python重写了一下,分享一段用于监控打印机队列的代码,希望能帮助有同样需求的小伙伴
import time
import win32print
#----------------------------------------------------------------------
def print_job_checker():
"""
每1秒确认一下打印机的打印队列内容
"""
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(1)
print( "No more jobs!")
#----------------------------------------------------------------------
if __name__ == "__main__":
print_job_checker()
1. win32print
这是一个第三方库,需要你安装,安装方式如下
pip install win32print
如果有必要的话,可以用国内源来安装,这样速度会比较快。
2. 关于打印机
我们这里使用了默认的打印机,因此在你准备使用的时候,记得先设置好用哪一台打印机。
3. 关于jobs的设定
我们默认是一个包含一个元素的列表,这一点很重要,如果你设置了一个空白的列表,那么下面的循环也就没有作用了,从而也就起不到监控打印机的作用了,但是也不能设置成死循环,这样的话的就没有办法进入监控打印机后面的作业了。