使用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
運行腳本,使用迅雷下載一步高清電影,效果如下:
將代碼拷貝到Linux服務器,運行一下。
下載一個軟件包,效果如下: