網(wǎng)站首頁 編程語言 正文
方法一:psutil
這里使用了psutil的庫使用前需要pip一下,而這玩意兒直接抓cpu好像會因為某些原因效果不理想,所以抄了網(wǎng)上的代碼取10次的平均值.
# !/user /env /bin python3
# !author: Luwdig
import psutil
import time
import re, sys
def processinfo(x):
p = psutil.process_iter()
tlp = 0
try:
for r in p:
aa = str(r)
f = re.compile(x, re.I)
if f.search(aa):
tlp = int(aa.split('pid=')[1].split(',')[0])
# 檢索pid列表并獲取傳入值的pid
return tlp
except (psutil.NoSuchProcess):
print('Ransomware process is caught, but the process does '
'not exist (PID: %d)' % aa.pid)
def getinfo(tlp):
p = psutil.Process(tlp)
cpu_list = []
for i in range(10):
p_cpu = p.cpu_percent(interval=0.1)
cpu_list.append(p_cpu)
cpu = 0.00
cpu = float(sum(cpu_list))/len(cpu_list)/10
# 循環(huán)10次cpu使用值并取平均值
try:
pid = p.pid
name = p.name()
Memory = p.memory_percent(memtype="rss") / 2
localtime = time.strftime('%H:%M:%S', time.localtime(time.time()))
# 取進程pid 進程名 進程內(nèi)存
except IOError as e:
print(e)
else:
# return pid, name, Memory, cpu, time
print("Time:%s" % (localtime), "PID:%s" % (pid), "Name:%s" % (name),
"Memory=%.3f%%" % (Memory), "CPU=%.2f%%" % (cpu * 2))
if __name__ == "__main__":
while 0 < 1:
s = processinfo('uibot.exe')
getinfo(s)
if False:
print("打開程序")
else:
continue
方法二:top
import sys
import time
import os
import psutil
# 設(shè)置app名稱,名稱中不允許有空格,否則后面取top結(jié)果會錯位
if len(sys.argv) < 2:
app_name = "MyDemo"
else:
app_name = str(sys.argv[1])
# 根據(jù)app_name查找進程id
pid = None
for proc in psutil.process_iter():
if app_name in proc.name():
pid = proc.pid
print("pid = [%s]" % str(pid))
# 拼接top命令,-pid 制定進程id,-l 查詢3次(小于3次不準(zhǔn)確),tail -n 獲取最后一次的結(jié)果, awk print 輸出第三列、第八列結(jié)果(對應(yīng)%cpu和mem)
get_cpu_mem = "top -pid " + str(pid) + " -l 3 | tail -n 1 | awk '{print $3,$8}'"
print("execute cmd = [%s]" % str(get_cpu_mem))
# monitor process and write data to file
interval = 30 # polling seconds
with open("process_monitor_" + app_name + '_' + str(pid) + ".csv", "a+") as f:
f.write("time,cpu%,mem%\n") # titles
while True:
current_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
current_cpu_mem = os.popen(get_cpu_mem).read().strip()
cpu = current_cpu_mem.split(" ")[0]
mem = current_cpu_mem.split(" ")[1]
line = current_time + ',' + str(cpu) + ',' + str(mem)
print(line)
f.write(line + "\n")
time.sleep(interval)
原文鏈接:https://blog.csdn.net/weixin_39589455/article/details/129167281
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-05-13 類實例化 對象的內(nèi)存模型 及 內(nèi)存占用分析
- 2022-06-04 python對文檔中元素刪除,替換操作_python
- 2022-01-16 ES6新增聲明格式、變量解構(gòu)賦值及模板字符串
- 2022-07-18 Linux安裝配置nginx
- 2022-05-14 解決Linux未啟用網(wǎng)卡的問題_Linux
- 2022-01-11 web:war 和 web:war exploded 遇到的坑
- 2022-05-18 Python學(xué)習(xí)之異常中的finally使用詳解_python
- 2022-05-22 基于jQuery排序及應(yīng)用實現(xiàn)Tab欄特效_jquery
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支