首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从python脚本运行vnstat

从python脚本运行vnstat
EN

Stack Overflow用户
提问于 2014-06-02 23:30:05
回答 1查看 1K关注 0票数 0

跑步时

代码语言:javascript
复制
vnstat -i [interface] --oneline

打印所选接口的带宽使用情况。

代码语言:javascript
复制
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

但是要从所有接口打印所有带宽使用情况,我需要运行以下命令来获取所有接口的名称

代码语言:javascript
复制
vnstat --iflist

然后遍历结果,将使用结果存储在列表中。

代码语言:javascript
复制
for item in result.split():
    # usage = run command 'vnstat --oneline -i [interface]
    # usageList.append(usage)
print ''.join(usageList)

上面的脚本工作,但运行缓慢,如果有许多接口。如何优化?

EN

回答 1

Stack Overflow用户

发布于 2014-06-02 23:50:46

  1. 请注意,在*中有大量令人敬畏的网络统计数据--非常快。
  2. 如果您真的想要vnstat (看起来很整洁!),下面是一些并行扫描每个网络接口的代码。 导入多进程、子进程、时间 def check_net( iface ):返回(i面,subprocess.check_output( 'vnstat',‘-oneline’,'-i',i面), ifaces = subprocess.check_output( 'vnstat',‘-iflist’).split()2: 试试看: True: pool = multiprocessing.Pool(len(ifaces))用于ifaces,output in pool.imap_unordered(check_net,ifaces):print iface.upper(),如果输出中的“Error”:print‘?output.rstrip()打印time.sleep(10),但KeyboardInterrupt: pass除外

输出:

代码语言:javascript
复制
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 ?
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24004893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档