日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

使用python獲取指定進程的CPU/內存情況;Python獲取指定進程的CPU和內存使用情況

作者:別出BUG求求了 更新時間: 2023-11-14 編程語言

方法一:psutil

這里使用了psutil的庫使用前需要pip一下,而這玩意兒直接抓cpu好像會因為某些原因效果不理想,所以抄了網上的代碼取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
        # 循環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 進程名 進程內存
    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

# 設置app名稱,名稱中不允許有空格,否則后面取top結果會錯位
if len(sys.argv) < 2:
    app_name = "MyDemo"
else:
    app_name = str(sys.argv[1])

# 根據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次不準確),tail -n 獲取最后一次的結果, awk print 輸出第三列、第八列結果(對應%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

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新