Python獲取CPU使用率、內存使用率、網絡使用狀態

byyc 9年前發布 | 3K 次閱讀 Python

Python獲取CPU使用率、內存使用率、網絡使用狀態
注:需要安裝psutil庫

#!/usr/bin/env python
#

$Id: iotop.py 1160 2011-10-14 18:50:36Z g.rodola@gmail.com $

#

Copyright (c) 2009, Jay Loden, Giampaolo Rodola'. All rights reserved.

Use of this source code is governed by a BSD-style license that can be

found in the LICENSE file.

Transplant to NT system by hui.wang, 2012-11-28

Add function of get cpu state and get memory state by hui.wang,2012-11-29

""" Shows real-time network statistics. Author: Giampaolo Rodola' <g.rodola@gmail.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

def print_line(str): print str

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_line(time.asctime()+" | "+cpu_state+" | "+memory_state)

# totals
print_line(" NetStates:")
print_line("total bytes:           sent: %-10s   received: %s" \
      % (bytes2human(tot_after.bytes_sent),
         bytes2human(tot_after.bytes_recv))
)
print_line("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_line("")
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_line(templ % (name, "TOTAL", "PER-SEC"))
    print_line(templ % (
        "bytes-sent",
        bytes2human(stats_after.bytes_sent),
        bytes2human(stats_after.bytes_sent - stats_before.bytes_sent) + '/s',
    ))
    print_line(templ % (
        "bytes-recv",
        bytes2human(stats_after.bytes_recv),
        bytes2human(stats_after.bytes_recv - stats_before.bytes_recv) + '/s',
    ))
    print_line(templ % (
        "pkts-sent",
        stats_after.packets_sent,
        stats_after.packets_sent - stats_before.packets_sent,
    ))
    print_line(templ % (
        "pkts-recv",
        stats_after.packets_recv,
        stats_after.packets_recv - stats_before.packets_recv,
    ))
    print_line("")




try: interval = 0 while 1: args = poll(interval) refresh_window(*args) interval = 1 except (KeyboardInterrupt, SystemExit): pass</pre>

 本文由用戶 byyc 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!