Python擷取CPU使用率、記憶體使用量率、網路使用狀態

來源:互聯網
上載者:User

註:需要安裝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 sysimport osimport atexitimport timeimport psutilprint "Welcome,current system is",os.name," 3 seconds late start to get data..."time.sleep(3) line_num = 1def print_line(str):print str#function of Get CPU Statedef getCPUstate(interval=1):    return (" CPU: " + str(psutil.cpu_percent(interval)) + "%")#function of Get Memorydef 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 linedef 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 = 1except (KeyboardInterrupt, SystemExit):    pass

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.