当前位置: 首页 > 面试题库 >

如何使用Python将/ proc / net / dev的输出解析为每个接口的key:value对?

丌官嘉良
2023-03-14
问题内容

在Linux 上/ proc / net /
dev
的输出如下所示:

Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo:18748525  129811    0    0    0     0          0         0 18748525  129811    0    0    0     0       0          0
  eth0:1699369069 226296437    0    0    0     0          0      3555 4118745424 194001149    0    0    0     0       0          0
  eth1:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
  sit0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

如何使用Python将每个接口的输出解析为key:value对?我已经找到了这个论坛主题,可以使用Shell脚本来实现它,并且有Perl扩展,但是我需要使用Python。


问题答案:

这是格式很漂亮的输入,您可以通过拆分每一行轻松地获取列和​​数据列表,然后为其创建字典。

这是一个没有正则表达式的简单脚本

lines = open("/proc/net/dev", "r").readlines()

columnLine = lines[1]
_, receiveCols , transmitCols = columnLine.split("|")
receiveCols = map(lambda a:"recv_"+a, receiveCols.split())
transmitCols = map(lambda a:"trans_"+a, transmitCols.split())

cols = receiveCols+transmitCols

faces = {}
for line in lines[2:]:
    if line.find(":") < 0: continue
    face, data = line.split(":")
    faceData = dict(zip(cols, data.split()))
    faces[face] = faceData

import pprint
pprint.pprint(faces)

它输出

{'    lo': {'recv_bytes': '7056295',
            'recv_compressed': '0',
            'recv_drop': '0',
            'recv_errs': '0',
            'recv_fifo': '0',
            'recv_frame': '0',
            'recv_multicast': '0',
            'recv_packets': '12148',
            'trans_bytes': '7056295',
            'trans_carrier': '0',
            'trans_colls': '0',
            'trans_compressed': '0',
            'trans_drop': '0',
            'trans_errs': '0',
            'trans_fifo': '0',
            'trans_packets': '12148'},
 '  eth0': {'recv_bytes': '34084530',
            'recv_compressed': '0',
            'recv_drop': '0',
            'recv_errs': '0',
            'recv_fifo': '0',
            'recv_frame': '0',
            'recv_multicast': '0',
            'recv_packets': '30599',
            'trans_bytes': '6170441',
            'trans_carrier': '0',
            'trans_colls': '0',
            'trans_compressed': '0',
            'trans_drop': '0',
            'trans_errs': '0',
            'trans_fifo': '0',
            'trans_packets': '32377'}}


 类似资料:
  • 问题内容: 我正在尝试从中解析套接字信息,虽然我可以识别一些字段,例如内存地址或发送队列使用,但是我找不到每个条目如何绑定到其套接字描述符。例如,使用以下数据: 我想知道哪个是对应的套接字描述符。 问题答案: 取索引节点号(在这种情况下为507218)。该套接字的每个打开的文件描述符(同一个套接字可能有多个文件描述符)将以以下形式的链接显示: (其中进程ID和文件描述符在哪里)。

  • 本文向大家介绍Ruby中的Proc类及Proc的类方法Proc.new的使用解析,包括了Ruby中的Proc类及Proc的类方法Proc.new的使用解析的使用技巧和注意事项,需要的朋友参考一下 Proc是对块及其context(局部变量的作用域以及栈框架)进行对象化处理之后得到的过程对象。您可以像使用无名函数那样来使用Proc,但它不会导入局部变量的作用域(可以把动态局部变量用作Proc局部变量

  • 我找到了. avi文件 gst-launch-1.0-v filesrc location=测试。阿维!avidemux!decodebin!视频转换!“视频/x-raw,格式=YUY2”!v4l2sink设备=/dev/video0 这个屏幕输出到/dev/video0: gst-Launit-1.0-v ximagesrc start x=1 starty=1 endx=320 endy=24

  • 问题内容: 我已经使用CNN训练了二进制分类模型,这是我的代码 在这里,我想像TensorFlow一样获得每一层的输出,我该怎么做? 问题答案: 你可以使用以下命令轻松获取任何图层的输出: 对于所有图层,请使用以下命令: 注:为了模拟差使用learning_phase如1.在layer_outs以其它方式使用0. 编辑:(基于评论) 创建张量函数,该函数随后用于从给定输入的符号图中获取输出。 现在

  • 问题内容: 我正在通过我的asmx网络服务以json字符串形式接收.NET 对象,并尝试在gson库的帮助下对其进行解析。但是似乎不支持解析.net样式的DateTime。我如何使用Gson 轻松地将其解析为Java 对象? 我收到的字符串是这样的: PS我不想在服务器端进行任何修改以接收DateTime作为Long值 问题答案: 像这样: 或改用此示例,并遵循“使用WCF Microsoft J

  • 本文向大家介绍利用python将pdf输出为txt的实例讲解,包括了利用python将pdf输出为txt的实例讲解的使用技巧和注意事项,需要的朋友参考一下 一个礼拜前一个同学问我这个事情,由于之前在参加华为的比赛,所以赛后看了一下,据说需要用到pdfminer这个包。于是安装了一下,安装过程很简单: 中间也没有任何的报错。至于如何调用,本人也没有很好的研究过pdfminer这个库,于是开始了百度…