本文目录导读:

- Windows PowerShell 获取打印任务
- Windows Batch 脚本
- Python 脚本
- Linux 系统 (CUPS)
- Python (Linux)
- 跨平台方案(使用 Python)
- 实时监控打印任务(完整示例)
- 注意事项
我来介绍几种获取打印任务的方法,涵盖不同场景:
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()
注意事项
- 权限问题:可能需要管理员权限
- 延迟:打印任务信息可能有几秒延迟
- 打印机驱动:不同厂商打印机可能有额外特殊命令
- 安全考虑:某些信息可能涉及用户隐私
需要我详细演示某个特定平台的方法吗?