运行时
vnstat -i [interface] --oneline
打印所选接口的带宽使用情况。
1;eth0;10/11/11;1.45 MiB;801 KiB;2.23 MiB;0.59 kbit/s;Oct '11;3.93 MiB;2.06 MiB;6.00 MiB;0.05 kbit/s;3.93 MiB;2.06 MiB;6.00 MiB
但要从所有接口打印所有带宽使用,我需要运行以下命令来获取所有接口的名称
vnstat --iflist
然后遍历结果以将使用结果存储在列表中
for item in result.split():
# usage = run command 'vnstat --oneline -i [interface]
# usageList.append(usage)
print ''.join(usageList)
上面的脚本有效但如果有很多接口则运行缓慢。如何优化?
答案 0 :(得分:0)
请注意,/proc/net/*中提供了大量令人敬畏的网络统计信息 - 非常快
如果你真的想要vnstat
(看起来很整洁!),这里有一些代码可以并行扫描每个网络接口。
导入多处理,子流程,时间
def check_net(iface): 回来( 我面对, subprocess.check_output( [' vnstat'' - ONELINE'' -i',IFACE] ) )
ifaces = subprocess.check_output( [' vnstat',' - iflist'] ).split()[2:]
尝试: 而真: pool = multiprocessing.Pool(len(ifaces)) 对于iface,在pool.imap_unordered(check_net,ifaces)中输出: 打印iface.upper(), 如果'错误'在输出中: 打印'?' 其他: print output.rstrip() 打印 time.sleep(10) 除KeyboardInterrupt外: 通
LXCBR0 1;lxcbr0;06/02/14;0 KiB;3 KiB;3 KiB;0.00 kbit/s;Jun '14;0 KiB;3 KiB;3 KiB;0.00 kbit/s;0 KiB;3 KiB;3 KiB
WLAN0 1;wlan0;06/02/14;7.77 MiB;401 KiB;8.17 MiB;1.11 kbit/s;Jun '14;7.77 MiB;401 KiB;8.17 MiB;0.46 kbit/s;7.77 MiB;401 KiB;8.17 MiB
ETH0 eth0: Not enough data available yet.
LO ?
ETH0 eth0: Not enough data available yet.
LXCBR0 1;lxcbr0;06/02/14;0 KiB;3 KiB;3 KiB;0.00 kbit/s;Jun '14;0 KiB;3 KiB;3 KiB;0.00 kbit/s;0 KiB;3 KiB;3 KiB
WLAN0 1;wlan0;06/02/14;7.77 MiB;401 KiB;8.17 MiB;1.11 kbit/s;Jun '14;7.77 MiB;401 KiB;8.17 MiB;0.46 kbit/s;7.77 MiB;401 KiB;8.17 MiB
LO ?