python psutil模块取cpu使用率、内存使用率与网络使用状态

发布时间:2020-01-27编辑:脚本学堂
python psutil模块的用法,在python中用第三方模块psutil获取cpu使用率、内存使用率与网络使用状态等信息,亲测可用有效果图。

python psutil模块用法

默认python未安装psutil模块,安装方法参考:python psutil模块安装与使用实例

代码:
 

复制代码 代码示例:
#   
# Copyright (c) 2014, Lambo Wang, All rights reserved.   
# Use of this source code is governed by a GNU v2 license that can be   
# found in the LICENSE file.   
#  
# Logs: 
# Transplant to NT system by Lambo Wang, 2012-11-28   
# Add function of get cpu state and get memory state by Lambo Wang,2012-11-29   
# first add to Git of OSChina,2014-10-24 by Lambo Wang  
""" 
Shows real-time NT system statistics. 
Author: Lambo Wang <lambo.wang@icloud.com> 
"""   
   
import sys   
import os   
   
import atexit   
import time   
import psutil   
   
#print "Welcome,current system is",os.name," 3 seconds late start to get data..."   
time.sleep(3)   
    
line_num = 1   
   
#function of Get CPU State   
def getCPUstate(interval=1):   
    return (" CPU: " + str(psutil.cpu_percent(interval)) + "%")   
#function of Get Memory   
def getMemorystate():   
    phymem = psutil.phymem_usage()   
    buffers = getattr(psutil, 'phymem_buffers', lambda: 0)()   
    cached = getattr(psutil, 'cached_phymem', lambda: 0)()   
    used = phymem.total - (phymem.free + buffers + cached)   
    line = " Memory: %5s%% %6s/%s" % (   
        phymem.percent,   
        str(int(used / 1024 / 1024)) + "M",   
        str(int(phymem.total / 1024 / 1024)) + "M"   
    )      
    return line   
def bytes2human(n):   
    """ 
    >>> bytes2human(10000) 
    '9.8 K' 
    >>> bytes2human(100001221) 
    '95.4 M' 
    """   
    symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')   
    prefix = {}   
    for i, s in enumerate(symbols):   
        prefix[s] = 1 << (i+1)*10   
    for s in reversed(symbols):   
        if n >= prefix[s]:   
            value = float(n) / prefix[s]   
            return '%.2f %s' % (value, s)   
    return '%.2f B' % (n)   
   
def poll(interval):   
    """Retrieve raw stats within an interval window."""   
    tot_before = psutil.network_io_counters()   
    pnic_before = psutil.network_io_counters(pernic=True)   
    # sleep some time   
    time.sleep(interval)   
    tot_after = psutil.network_io_counters()   
    pnic_after = psutil.network_io_counters(pernic=True)   
    # get cpu state   
    cpu_state = getCPUstate(interval)   
    # get memory   
    memory_state = getMemorystate()   
    return (tot_before, tot_after, pnic_before, pnic_after,cpu_state,memory_state)   
   
def refresh_window(tot_before, tot_after, pnic_before, pnic_after,cpu_state,memory_state):   
    os.system("cls")   
    """Print stats on screen."""   
   
    #print current time #cpu state #memory   
    print(time.asctime()+" | "+cpu_state+" | "+memory_state)   
       
    # totals   
    print(" NetStates:")   
    print("total bytes:           sent: %-10s   received: %s" % (bytes2human(tot_after.bytes_sent),   
                                                                      bytes2human(tot_after.bytes_recv))   
    )   
    print("total packets:         sent: %-10s   received: %s" % (tot_after.packets_sent,  
                                                                      tot_after.packets_recv)   
    ) 
    # per-network interface details: let's sort network interfaces so   
    # that the ones which generated more traffic are shown first   
    print("")   
    nic_names = pnic_after.keys()   
    #nic_names.sort(key=lambda x: sum(pnic_after[x]), reverse=True)   
    for name in nic_names:   
        stats_before = pnic_before[name]   
        stats_after = pnic_after[name]   
        templ = "%-15s %15s %15s"   
        print(templ % (name, "TOTAL", "PER-SEC"))   
        print(templ % (   
            "bytes-sent",   
            bytes2human(stats_after.bytes_sent),   
            bytes2human(stats_after.bytes_sent - stats_before.bytes_sent) + '/s',   
        ))   
        print(templ % (   
            "bytes-recv",   
            bytes2human(stats_after.bytes_recv),   
            bytes2human(stats_after.bytes_recv - stats_before.bytes_recv) + '/s',   
        ))   
        print(templ % (   
            "pkts-sent",   
            stats_after.packets_sent,   
            stats_after.packets_sent - stats_before.packets_sent,   
        ))   
        print(templ % (   
            "pkts-recv",   
            stats_after.packets_recv,   
            stats_after.packets_recv - stats_before.packets_recv,   
        ))   
        print("")   
   
try:   
    interval = 0   
    while 1:   
        args = poll(interval)   
        refresh_window(*args) 
        interval = 1   
except (KeyboardInterrupt, SystemExit):   
    pass 

运行结果图:
python psutil模块取cpu使用率、内存使用率与网络使用状态