利用python数组解析ifconfig命令输出

有时候我们需要对命令的格式化输出进行解析,解析通常依赖命令自身的格式化特征,不过这些特征都有共性:各种层面的循环列表结构

比如ifconfig命令,首先循环列出所有网络接口,然后在网络接口内,在循环列出各个预定义字段

所以对该命令解析时,首先要按list之list的结构对其输出内容进行组织,这里用python的(多维)数组是个不错的主意

#encoding=utf-8
import subprocess
tmp_file = open('/tmp/g.log','w')
subprocess.call(['ifconfig'], stdout=tmp_file)

tmp_file = open('/tmp/g.log','r')
ifaces = []
ifaces.append([]) #向数组的尾端添加一个数组!
ifaces_cnt = 0
line_num = 0
for line_raw in tmp_file:
    line = line_raw.rstrip() #空行的长度为1,strip后长度才为0
    if len(line) > 0:
        ifaces[ifaces_cnt].append(line) #向数组的尾端添加一个字符串!
    else:
        ifaces_cnt = ifaces_cnt +1
        ifaces.append([])

print 'there are %d section'%len(ifaces)
for face in ifaces:
    print '========'
    for l in face:
        print l

运行输出效果:

there are 3 section
========
eth1      Link encap:以太网  硬件地址 00:1c:25:dd:44:8b
          inet 地址:192.168.0.105  广播:192.168.0.255  掩码:255.255.255.0
          inet6 地址: fe80::21c:25ff:fedd:448b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
          接收数据包:569916 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:389975 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000
          接收字节:651139742 (651.1 MB)  发送字节:37622845 (37.6 MB)
          中断:17
========
lo        Link encap:本地环回
          inet 地址:127.0.0.1  掩码:255.0.0.0
          inet6 地址: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  跃点数:1
          接收数据包:17094 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:17094 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:0
          接收字节:1578445 (1.5 MB)  发送字节:1578445 (1.5 MB)
========

多出来的1个section是边界效应,请忽视

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-09 05:50:54

利用python数组解析ifconfig命令输出的相关文章

python中得到shell命令输出的方法

python中得到shell命令输出的方法: 1. import subprocess output = subprocess.Popen(['ls','-l'],stdout=subprocess.PIPE,shell=True).commun icate() print output[0] 2. import commands return_code, output = commands.getstatusoutput('ls -l') 3. import os process = os.p

python数组列表、字典、拷贝、字符串

python中字符串方法 1 name = "I teased at life as if it were a foolish game" 2 print(name.capitalize())#首字母大写 3 print(name.count("a"))#查找字符串中a的个数 4 print(name.center(50,"-"))#长度为50将name放中间不够的用-补全 5 print(name.endswith("ex"

使用 python 获取 Linux 的 IP 信息(通过 ifconfig 命令)

我们可以使用 python 代码通过调用 ifconfig 命令来获取 Linux 主机的 IP 相关信息,包括:网卡名称.MAC地址.IP地址等. 第一种实现方式: 1 #!/usr/bin/python 2 #encoding: utf-8 3 4 from subprocess import Popen, PIPE 5 6 def getIfconfig(): 7 p = Popen(['ifconfig'], stdout = PIPE) 8 data = p.stdout.read()

《利用Python进行数据分析·第2版》第四章 Numpy基础:数组和矢量计算

<利用Python进行数据分析·第2版>第四章 Numpy基础:数组和矢量计算 numpy高效处理大数组的数据原因: numpy是在一个连续的内存块中存储数据,独立于其他python内置对象.其C语言编写的算法库可以操作内存而不必进行其他工作.比起内置序列,使用的内存更少(即时间更快,空间更少) numpy可以在整个数组上执行复杂的计算,而不需要借助python的for循环 4.0 前提知识 数据:结构化的数据代指所有的通用数据,如表格型,多维数组,关键列,时间序列等 相关包:numpy pa

利用 Python 练习数据挖掘

覆盖使用Python进行数据挖掘查找和描述数据结构模式的实践工具. 第一节 介绍 数据挖掘是一个隐式提取以前未知的潜在有用的数据信息提取方式.它使用广泛,并且是众多应用的技术基础. 本文介绍那些使用Python数据挖掘实践用于发现和描述结构模式数据的工具.近些年来,Python在开发以数据为中心的应用中被用的越来越多.感谢大型科学计算社区的支持以及大大丰富的数据分析函数库.尤其是,我们可以看到如何: ? 导入和可视化数据 ? 数据分类 ? 使用回归分析和相关测量法发现数据之间的关系 ? 数据降维

转-利用 Python 练习数据挖掘

英文出处:Giuseppe Vettigli.欢迎加入翻译组. 覆盖使用Python进行数据挖掘查找和描述数据结构模式的实践工具. 第一节 介绍 数据挖掘是一个隐式提取以前未知的潜在有用的数据信息提取方式.它使用广泛,并且是众多应用的技术基础. 本文介绍那些使用Python数据挖掘实践用于发现和描述结构模式数据的工具.近些年来,Python在开发以数据为中心的应用中被用的越来越多.感谢大型科学计算社区的支持以及大大丰富的数据分析函数库.尤其是,我们可以看到如何: • 导入和可视化数据 • 数据分

如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py文件.我们需要获取的数据是朋友圈和发布日期,因此在这里定义好日期和动态两个属性,如下图所示. 2.修改实现爬虫逻辑的主文件moment.py,首先要导入模块,尤其是要主要将items.py中的WeixinMomentItem类导入进来,这点要特别小心别被遗漏了.之后修改start_requests方

利用python进行数据分析--(阅读笔记一)

以此记录阅读和学习<利用Python进行数据分析>这本书中的觉得重要的点! 第一章:准备工作 1.一组新闻文章可以被处理为一张词频表,这张词频表可以用于情感分析. 2.大多数软件是由两部分代码组成:少量需要占用大部分执行时间的代码,以及大量不经常执行的“粘合剂代码”. cython已经成为python领域中创建编译型扩展以及对接c/c++代码的一大途径. 3.在那些要求延迟性非常小的应用程序中(例如高频交易系统),为了尽最大可能地优化性能,耗费时间使用诸如C++这样更低级.更低生产率的语言进行

利用Python脚本管理Windows服务

Windows服务常用的功能就是启动服务,关闭服务,重启服务和查询服务运行状态,其中查询服务运行状态是其他三种操作的基础. 本文中提到的使用Python脚本管理Windows服务实际上是调用win32serviceutil模块,此模块来自pywin32包,此模块本身有管理服务的功能,有兴趣的可以去阅读它的部分源码. 本脚本存在的目的是为了熟练Python的语法和基本操作,Windows下有更好的命令行工具来管理服务,如sc.Powershell等.通常命令行工具的执行速度要比services.m