python 獲取網卡實時流量

發布時間:2018-08-05 21:04:01編輯:admin閱讀(5523)

    使用python監控系統時,獲取網卡流量是比較難搞的,網上找了一個比較好的腳本,分享一下!


    psutil模塊是一個跨平台的獲取進程和系統應用情況(CPU,内存,磁盤,網絡,傳感器)的庫。該模塊用于系統監控、限制進程資源和運行進程的管理等方面


    安裝模塊psutil

    pip install psutil


    親測Linux和Windows使用正常


    net_traffic.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    try:
        import psutil
    except ImportError:
        print('Error: psutil module not found!')
        exit()
    
    
    def get_key():
    
        key_info = psutil.net_io_counters(pernic=True).keys()
    
        recv = {}
        sent = {}
    
        for key in key_info:
            recv.setdefault(key, psutil.net_io_counters(pernic=True).get(key).bytes_recv)
            sent.setdefault(key, psutil.net_io_counters(pernic=True).get(key).bytes_sent)
    
        return key_info, recv, sent
    
    
    def get_rate(func):
    
        import time
    
        key_info, old_recv, old_sent = func()
    
        time.sleep(1)
    
        key_info, now_recv, now_sent = func()
    
        net_in = {}
        net_out = {}
    
        for key in key_info:
            # float('%.2f' % a)
            net_in.setdefault(key, float('%.2f' %((now_recv.get(key) - old_recv.get(key)) / 1024)))
            net_out.setdefault(key, float('%.2f' %((now_sent.get(key) - old_sent.get(key)) / 1024)))
    
        return key_info, net_in, net_out
    
    
    while 1:
        try:
             key_info, net_in, net_out = get_rate(get_key)
    
             for key in key_info:
                 # lo 是linux的本機回環網卡,以太網是我win10系統的網卡名
                 if key != 'lo' or key == '以太網':
                    print('%s\nInput:\t %-5sKB/s\nOutput:\t %-5sKB/s\n' % (key, net_in.get(key), net_out.get(key)))
        except KeyboardInterrupt:
            exit()

    注意:以太網是我win10網卡名,可自行更改

    數字顯示,改成保留小數點2位,使用float


    運行腳本,使用迅雷下載一步高清電影,效果如下:

    動畫1.gif


    将代碼拷貝到Linux服務器,運行一下。

    下載一個軟件包,效果如下:

    blob.png


關鍵字