获取centos下的所有网卡配置信息
一.任务:
获取centos下的所有网卡的配置信息和dns记录,并返回json格式的数据
之所以选择了json格式,也是为了更方便的传数据给前端页面去处理。
再用Php写一个前端的页面,去接受这个python里的json数据 就可以在轻松地在前端对机器进行网络设置的修改
二.整体思路:
1.找到有哪几个网卡配置文件:
- 在该目录下:
/etc/sysconfig/network-scripts/
- 一般网卡只有一个,虚拟机当中可以自己添加网卡
2.依次打开网卡配置文件 :
3.获取所要的配置项信息
- 遍历配置项的每一行信息
- 如果该行有想要的参数如IPADDR的话,就以=号为分隔符分割,提取后面的数据
4.用字典保存所要信息,最后再json化数据的格式
三.处理细节:
1.如何找到有哪几个网卡配置文件?
一开始想使用
output = os.popen('cat /etc/sysconfig/network-scripts/ifcfg-eth* ')
来打开网卡的所有配置文件,但是会打开多余的文件。
因为最后的*
会匹配到类似ifcfg-eth0~
结尾的备份文件
所以我要过滤掉~
结尾的备份文件,并列出符合条件的文件。
(status,allfilename) = commands.getstatusoutput("ls /etc/sysconfig/network-scripts/ | grep '^ifcfg.*[0-9.*]$'")
现在就知道了有哪几个网卡配置文件,并且知道它的名字叫什么。
接下来就要
- 依次打开配置文件
- 获取所要的配置项信息
- 保存到一个字典里
2.返回嵌套的json格式:
json后的初始数据:
目标数据:
要把黑色图中的数据转化为白色图中的数据。
方法1:
手动添加成类似二元数组的json格式,即白色图的格式:
- 先把第一个黑色图的数据:一个一级字典,直接转为json格式。
- 然后再拼接一些数据上去。。。手动形成所要的嵌套的json格式。
这个方法有点重复造轮子的意味,但是由于一开始php开发那边说要给他传的json格式中的数据的键值对要顺序的。
而将直接一个嵌套的字典用方法json.dumps()转化为一个嵌套的json格式,这当中的数据是无序的~
方法2:
问了别的python牛同学,给了我一个似乎更好的解决方法 这个方法好像也是,另外一个php开发的同事暗示我的方法,奈何我没有get到。
将黑色图的数据分别拿出来,再放入一个字典,形成嵌套的字典。 最后再转换成嵌套的json格式
本质上就是:一个嵌套的python字典转化为一个嵌套的json格式
这个方法2,在获取wins server2008中用了,更方便快捷~ 毕竟如果用方法1去实现,有点重复造轮子的以为,还不如直接使用轮子来得方便**
四.关键概念:
json格式:
什么是json格式?
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。
JSON 数据格式解析:
和 XML 一样,JSON 也是基于纯文本的数据格式。
由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的
- String
- Number
- Boolean
也可以传输
- 数组
或者一个复杂的
- Object 对象。
json如何表示数据?
Object 对象在 JSON 中是用 {} 包含一系列无序的 Key-Value 键值对表示的,实际上此处的 Object 相当于 Java 中的 Map
- 例如,一个 Address 对象包含如下 Key-Value:
city:Beijing
street:Chaoyang Road
postcode:100025(整数)
用 JSON 表示如下:
{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
- 其中 Value 也可以是另一个 Object 或者数组,因此,复杂的 Object 可以嵌套表示,例如,一个 Person 对象包含 name 和 address 对象,可以表示如下:
{"name":"Michael","address":
{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
}
python&json:
json的表示方式很像python当中的字典,也是用无序的用键值对来进行表示。 因此,也能很轻易的将Python中的字典转为json格式的数据:
- 实例:
用python中的字典表示的数据:
eth_info_dict_result:
将该字典json化后的结果:
eth_info_json_result = json.dumps(eth_info_dict_result)
五.代码:
https://github.com/jerrychan807/python-journey/blob/master/return_linux_eth_config.py