因为需要一直关注被测软件的CPU利用率和内存占用,人工记录十分麻烦,所以想做一个应用程序来代替手工记录。
思路:
1.弹窗,输入进程号
2.获取进程对象
3.日志保存在一个csv文件中,文件命名方式为:进程名+Process+进程号
4.文件第一行写入进程名,第二行表示各项数值对应的名称
5.获取当前时间、进程的CPU利用率、内存占用
6.将时间,CPU利用率,内存占用写入csv文件并保存
7.三秒钟获取和记录一次
我要求追加,每次运行该程序的时候不删除之前的文件,所以把文件是否存在的判断给注释掉了
这里我没用with open,直接用的open打开
因为刚开始用with open然后将这个代码打包为exe文件并执行之后,等了1分钟发现并没有东西写入,猜测可能是还没保存或者杀死进程导致文件没保存?
但是运行一天之后发现确实有东西写入,也可能等待时间1分钟太短。(不太清楚,或者有大佬可以给我提提建议)
我的解决方式:每次循环都写一次文件保存一次(但是感觉这样好像性能不高,但对于功能来说完全满足我的需求)
该段代码缺点:
1.在监控过程中,自己关闭监控的应用程序,本程序会退出
2.监控过程中,直接打开记录的文件,程序会退出
import time
from tkinter import simpledialog
import tkinter
import psutil
import os
root=tkinter.Tk()
root.withdraw()
pid=int(simpledialog.askstring(title="pid",prompt="输入进程号"))
p=psutil.Process(pid)
filename=p.name().split(".")[0]+"Process"+str(pid)+".csv"
#if os.path.exists("./"+filename):
# os.remove("./"+filename)
# 文件第一行写入进程名
f=open("./"+filename,"a+")
f.write(p.name()+"\n")
f.write("TIME,%CPU,%MEM\n")
f.close()
# 循环记录时间、进程CPU利用率,内存占用
while True:
f=open("./"+filename,"a+")
current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
cpu_percent=p.cpu_percent()
mem_percent=p.memory_percent()
line=current_time+","+str(cpu_percent)+","+str(mem_percent)
f.write(line+"\n")
f.close()
time.sleep(3)
另外,打包为可执行文件之后,这是一个无界面的程序,在任务管理器能找到该进程,所以我写了一个批处理文件来结束该进程。文章来源:https://www.toymoban.com/news/detail-411516.html
taskkill /f /im XXXX.exe
echo 结束完成
pause
写的不对或者不完善的请大佬们多多指正文章来源地址https://www.toymoban.com/news/detail-411516.html
到了这里,关于python实现监控指定进程的CPU利用率、内存占用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!