Bootstrap

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的设定

我们默认是一个包含一个元素的列表,这一点很重要,如果你设置了一个空白的列表,那么下面的循环也就没有作用了,从而也就起不到监控打印机的作用了,但是也不能设置成死循环,这样的话的就没有办法进入监控打印机后面的作业了。