如何使用Python在Linux系统中检测当前入站带宽速率(MBPS)
实现思路说明
首先拆解参考Java代码的核心逻辑:
- Linux内核会在
/sys/class/net/[网卡名]/statistics/rx_bytes文件中记录对应网卡从系统启动到当前累计接收的总字节数,该文件是系统暴露的统计接口,读取效率极高,不需要额外依赖工具 - 入站速率的计算逻辑为:间隔固定时间读取两次该文件的总字节数,两次的差值就是这段时间内接收的字节数,再换算成对应单位的速率即可
- 代码中
125000的换算逻辑:行业通用的网络速率单位MBPS指兆比特每秒,1 MBPS = 1000*1000 bit/秒 = 125000 字节/秒,所以字节差值除以125000就能直接得到MBPS数值;原代码乘-1是因为写反了两次读取值的先后顺序(旧值减新值得到负数,乘-1转为正数)
Python实现步骤
- 先确定要统计的网卡名,可执行
ip addr命令查看本机网卡名称,常见的有eth0、ens33、wlan0等 - 编写读取
rx_bytes文件的工具函数,直接读取文件内容转为整数即可 - 间隔固定时间(通常取1秒)读取两次数值,计算差值后换算成MBPS
示例代码
import time # 替换为你自己的网卡名称 ETH_INTERFACE = "eth0" RX_BYTES_PATH = f"/sys/class/net/{ETH_INTERFACE}/statistics/rx_bytes" def get_rx_total_bytes() -> int: with open(RX_BYTES_PATH, 'r', encoding='utf-8') as f: return int(f.readline().strip()) if __name__ == "__main__": # 第一次读取累计字节数 old_total = get_rx_total_bytes() # 间隔1秒 time.sleep(1) # 第二次读取累计字节数 new_total = get_rx_total_bytes() # 换算为兆比特每秒 current_mbps = (new_total - old_total) / 125000 print(f"当前入站速率:{current_mbps:.2f} MBPS")
注意事项
- 如果需要更高精度的统计,可以把间隔时间改短,比如间隔0.5秒,最终结果乘以2即可
- 如果你需要统计的是兆字节每秒而非兆比特每秒,把换算分母改为
1048576(即1024*1024)即可 - 该实现仅适用于Linux系统,Windows、macOS没有
/sys路径,需要调用对应系统的专属API实现
内容的提问来源于stack exchange,提问作者Flairings
相关产品推荐
相关产品推荐

