怎么用脚本获取打印任务

wen 实用脚本 2

本文目录导读:

怎么用脚本获取打印任务

  1. Windows PowerShell 获取打印任务
  2. Windows Batch 脚本
  3. Python 脚本
  4. Linux 系统 (CUPS)
  5. Python (Linux)
  6. 跨平台方案(使用 Python)
  7. 实时监控打印任务(完整示例)
  8. 注意事项

我来介绍几种获取打印任务的方法,涵盖不同场景:

Windows PowerShell 获取打印任务

使用 Win32_PrintJob WMI 类

# 获取所有打印任务
Get-WmiObject -Class Win32_PrintJob | Select-Object Name, Document, Owner, Status, TotalPages, JobStatus
# 获取当前活动的打印任务
Get-WmiObject -Class Win32_PrintJob | Where-Object {$_.Status -ne "Completed"} 

使用 PrintJob 类(Windows 10/11)

# 查看当前打印队列
Get-Printer | ForEach-Object {
    Write-Host "打印机: $($_.Name)"
    Get-PrintJob -PrinterName $_.Name
}

Windows Batch 脚本

@echo off
rem 查看默认打印机的打印队列
wmic printjob get name,Document,Owner,Status,TotalPages
rem 或者
powershell "Get-WmiObject Win32_PrintJob | Select Document,Owner,Status,TotalPages"

Python 脚本

Windows 系统

import subprocess
import wmi
def get_print_jobs():
    # 方法1:使用 wmi 模块
    c = wmi.WMI()
    jobs = c.Win32_PrintJob()
    for job in jobs:
        print(f"文档: {job.Document}")
        print(f"用户: {job.Owner}")
        print(f"状态: {job.Status}")
        print(f"页数: {job.TotalPages}")
        print("-" * 30)
    # 方法2:使用 subprocess 调用 powershell
    cmd = 'powershell "Get-WmiObject Win32_PrintJob | Select Document,Owner,Status"'
    result = subprocess.run(cmd, capture_output=True, text=True)
    print(result.stdout)
if __name__ == "__main__":
    get_print_jobs()

Linux 系统 (CUPS)

# 查看打印任务
lpstat -o
lpstat -W all  # 显示所有任务(包括完成的)
# 结合 awk 筛选特定属性
lpstat -o | awk '{print $1, $4}'
# 监控实时打印任务
watch -n 1 lpstat -o

Python (Linux)

import subprocess
def get_linux_print_jobs():
    # 获取打印任务
    result = subprocess.run(['lpstat', '-o'], capture_output=True, text=True)
    if result.stdout:
        lines = result.stdout.split('\n')
        for line in lines:
            if line.strip():
                print(line)
    # 获取打印机列表
    printers = subprocess.run(['lpstat', '-p'], capture_output=True, text=True)
    print(f"\n打印机状态:\n{printers.stdout}")
def monitor_print_jobs():
    """监听打印任务变化"""
    import time
    previous_jobs = set()
    while True:
        result = subprocess.run(['lpstat', '-o'], capture_output=True, text=True)
        current_jobs = set(result.stdout.split('\n')[:-1])
        # 检测新任务
        new_jobs = current_jobs - previous_jobs
        if new_jobs:
            print(f"新打印任务: {new_jobs}")
        # 检测完成的任务
        completed_jobs = previous_jobs - current_jobs
        if completed_jobs:
            print(f"任务完成: {completed_jobs}")
        previous_jobs = current_jobs
        time.sleep(2)  # 每2秒检查一次
if __name__ == "__main__":
    get_linux_print_jobs()
    # monitor_print_jobs()  # 如果想监控可以取消注释

跨平台方案(使用 Python)

import platform
import subprocess
import json
def get_print_jobs_cross_platform():
    system = platform.system()
    if system == "Windows":
        # Windows 系统
        cmd = [
            'powershell',
            'Get-WmiObject Win32_PrintJob | ConvertTo-Json'
        ]
    elif system == "Linux":
        # Linux 系统
        cmd = ['lpstat', '-o']
    elif system == "Darwin":  # macOS
        cmd = ['lpstat', '-o']
    else:
        raise NotImplementedError(f"系统 {system} 不受支持")
    result = subprocess.run(cmd, capture_output=True, text=True)
    if system == "Windows":
        # 解析 JSON
        try:
            jobs = json.loads(result.stdout)
            if isinstance(jobs, list):
                for job in jobs:
                    print(f"Document: {job['Document']}, Status: {job['Status']}")
        except:
            print("没有打印任务")
    else:
        print(result.stdout)
# 使用示例
get_print_jobs_cross_platform()

实时监控打印任务(完整示例)

import time
import os
import sys
from datetime import datetime
def monitor_print_jobs_windows():
    """Windows 打印任务实时监控"""
    try:
        while True:
            os.system('cls')  # 清屏
            # 获取打印任务
            cmd = 'powershell "Get-WmiObject Win32_PrintJob | Select-Object Document,Owner,Status,TotalPages | Format-Table -AutoSize"'
            result = subprocess.run(cmd, capture_output=True, text=True)
            print(f"打印队列监控 - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
            print("=" * 60)
            print(result.stdout)
            time.sleep(5)  # 每5秒刷新一次
    except KeyboardInterrupt:
        print("\n监控已停止")
# 执行监控
monitor_print_jobs_windows()

注意事项

  1. 权限问题:可能需要管理员权限
  2. 延迟:打印任务信息可能有几秒延迟
  3. 打印机驱动:不同厂商打印机可能有额外特殊命令
  4. 安全考虑:某些信息可能涉及用户隐私

需要我详细演示某个特定平台的方法吗?

抱歉,评论功能暂时关闭!