前言
最近做软件测试需要监控软件内存、cpu和GDI对象数,用psutil库可以很方便的实现监控内存和CPU,但是GDI好像还不行,最后来的win32api来调用的Windows API接口来实现GDI监控的,在此做个记录。
代码
import psutil
import os
import pandas as pd
import time
import win32gui
import win32process
import win32con
import win32api
# 定义需要监控的进程名称
process_name = "xxx.exe"
# 定义记录数据的文件名
data_file = "monitor_data.xlsx"
# 获取进程信息并记录到Excel文件中
def monitor_process(process_name, data_file ):
process_id = get_process_id(process_name)
if process_id is None:
print("未找到进程")
return
process = psutil.Process(process_id)
cpu_percent = process.cpu_percent(interval=None)
mem_info = process.memory_info()
commit_size = mem_info.vms / 1024 / 1024 # 转换为MB
# GDI
Py_process = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, False, process_id)
gdi_objects = win32process.GetGuiResources(Py_process, win32con.GR_GDIOBJECTS)
data = {"Time": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], "CPU": [cpu_percent],
"Memory": [mem_info.rss / 1024 / 1024], "Commit Size": [commit_size], "GDI Objects": [gdi_objects]}
df = pd.DataFrame(data)
if os.path.exists(data_file):
df_old = pd.read_excel(data_file, engine='openpyxl', index_col=0)
df_new = pd.concat([df_old, df])
df_new.to_excel(data_file)
else:
df.to_excel(data_file)