下面通过两种方法实现收集IP信息
1、通过 ifconfig 命令输出IP信息,并以“\n\n”切片分成不同的网卡块
2、通过 ifconfig 命令输出IP信息,并以第一个字符在顶格的方式切片分成不同的网卡块
3、通过 ifconfig 命令输出IP信息,并用正则表达式来获得
#vim ip1.py
#!/ usr / bin / env python
从子流程导入Popen,PIPE
def getIfconfig():
p = Popen(['ifconfig'],stdout = PIPE)
数据= p.stdout.read()。split('\ n \ n')
返回[如果数据为i,则i为i,而不是i.startswith('lo')]
def parseIfconfig(数据):
dic = {}
对于数据行:
line_list = lines.split('\ n')
devname = line_list [0] .split()[0]
macaddr = line_list [0] .split()[-1]
ipaddr = line_list [1] .split()[1] .split(':')[1]
dic [devname] = [ipaddr,macaddr]
返回dic
如果__name__ =='__main__':
数据= getIfconfig()
打印parseIfconfig(data)
验证结果如下:
#vim ip2.py
#!/ usr / bin / env python
从子流程导入Popen,PIPE
def getIP():
p = Popen(['ifconfig'],stdout = PIPE,stderr = PIPE)
标准输出,标准错误= p.communicate()
数据= [如果i为stdout.split('\ n')中的i,则为i]
返回数据
def genIP(数据):
new_line =''
行= []
用于输入数据:
如果line [0] .split():
lines.append(new_line)
new_line =行+'\ n'
其他:
new_line + =线+'\ n'
lines.append(new_line)
返回[如果我而不是i.startswith('lo'),则i为i换行]
def parseIfconfig(数据):
dic = {}
对于数据行:
line_list = lines.split('\ n')
devname = line_list [0] .split()[0]
macaddr = line_list [0] .split()[-1]
ipaddr = line_list [1] .split()[1] .split(':')[1]
dic [devname] = [ipaddr,macaddr]
返回dic
如果__name__ =='__main__':
数据= getIP()
data_list = genIP(数据)
打印parseIfconfig(data_list)
验证结果如下:
#vim ip3.py
#!/ usr / bin / env python
汇入
从子流程导入Popen,PIPE
def getIfconfig():
p = Popen(['ifconfig'],stdout = PIPE)
数据= p.stdout.read()。split('\ n \ n')
返回[如果数据为i,则i为i,而不是i.startswith('lo')]
def parseIfconfig(数据):
re_devname = re.compile(r'(br | eth | em | virbr | lo | bound)[\ d:] +',re.M)
re_mac = re.compile(r'HWaddr([0-9A-F:] {17})',re.M)
re_ip = re.compile(r'inet addr:([\ d \。] {7,15})',re.M)
devname = re_devname.search(数据)
如果devname:
devname = devname.group()
其他:
devname =''
mac = re_mac.search(数据)
如果是mac:
mac = mac.group(1)
其他:
mac =''
ip = re_ip.search(数据)
如果IP:
ip = ip.group(1)
其他:
ip =''
返回{devname:[ip,mac]}
如果__name__ =='__main__':
dic = {}
数据= getIfconfig()
对于我的数据:
dic.update(parseIfconfig(i))
打印骰子
验证结果如下:
可以看到三个方法的输出结果都是一样的字典,但是数据结构不同,第一种方法适合ifconfig命令执行后输出的网卡信息之间存在一个空行,第二种方法是系统比较通用的。第三种是通过正则方式来获得。