【发布时间】:2016-09-29 15:55:10
【问题描述】:
有没有更pythonic的方式来做到这一点
def parse_address(hostname, addresses):
netmask=''
for address in addresses:
if hostname in address:
_hostname, _netmask = address.strip().split('/')
hostname = _hostname.split()[-1]
netmask = '/' + _netmask.split()[0]
break
return netmask
测试用例
如果你做 TDD
def test_parse_netmask(self):
hostname = '127.0.0.1'
stdout = [
"1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever",
"3: wlp4s0 inet 192.168.2.133/24 brd 192.168.2.255 scope global dynamic wlp4s0\ valid_lft 58984sec preferred_lft 58984sec",
"4: docker0 inet 172.17.0.1/16 scope global docker0\ valid_lft forever preferred_lft forever",
"5: br-a49026d1a341 inet 172.18.0.1/16 scope global br-a49026d1a341\ valid_lft forever preferred_lft forever",
"6: br-d26f2005f732 inet 172.19.0.1/16 scope global br-d26f2005f732\ valid_lft forever preferred_lft forever",
]
netmask = scanner.parse_address(hostname, stdout)
self.assertEqual(netmask, '/8')
【问题讨论】:
-
所以你基本上只想要你的主机名后面的数字?
-
哈哈是的,我很早就在获取主机名
-
不,您真正想问自己的问题是,“如何使源输入机器可解析?”
-
@CivFan 这是unix command on a remote device 的结果,这是我能得到的最好的结构化格式
-
如果你可以控制远程代码,并且可以使用
psutil模块,看看psutil.net_if_addrs()。