Python获取CPU使用率、内存使用率、网络使用状态测试通过

 
转自(流浪的布布(浪布) -- 技术分享、学习笔记


#
# 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 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
# support for psutil(v3.2.2),2015-11-12 by Lambo Wang

# -*- coding: utf-8 -*-

# coding:utf-8

"""
Shows real-time 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.virtual_memory()
    line = "Memory: %5s%% %6s/%s" % (
        phymem.percent,
        str(int(phymem.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.net_io_counters()
    pnic_before = psutil.net_io_counters(pernic=True)
    # sleep some time
    time.sleep(interval)
    tot_after = psutil.net_io_counters()
    pnic_after = psutil.net_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):
    if os.name == 'nt':
        os.system("cls")
    else:
        os.system("clear")
    """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





  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值