访问netifaces词典的优雅方式

时间:2017-03-24 18:57:32

标签: python dictionary python-netifaces

这可能听起来很愚蠢但老实说我不知道​​如何做对。我现在在Python上乱搞了一段时间。我希望能够访问由netifaces(特定网卡的Mac地址)制作的字典,导入一个条目,然后将其打印为优雅的字符串。我有找到优雅方法的问题。

这是我到目前为止所拥有的:

>>>import netifaces
>>>netifaces.ifaddress('en3')

我得到适当的Mac地址值,如下所示:

{18: [{'addr': '1a:00:00:f1:e5:b1'}]}

我只需要导入Mac地址部分(作为字符串),所以我尝试以某种优雅的方式获取它,但我能做的最好的是:

>>>string = netifaces.ifaddress('en3')
>>>string[18]

我得到(正如预期的那样):

[{'addr': '1a:02:00:d1:e5:b1'}]

所以在这里我决定尝试一些严肃的Inception风格的编码,它本质上有效,但它绝对不优雅和简单......

>>>str=string[18]
>>>str[0]

所以我得到了:

{'addr': '1a:00:00:f1:e5:b1'}

然后我做了:

>>>s=str[0]
>>>s['addr']

然后我得到(最后)我的Mac地址...有没有优雅的方式来获取Mac地址而不使我的代码看起来像那样?

1 个答案:

答案 0 :(得分:1)

首先,不要将变量命名为stringstr,因为现在您已经屏蔽了内置的python类型和模块,并且有一天会让您感到困惑。

其次,netiface.ifaddresses返回的字典中的键是协议号,netifaces模块中的每个键都有命名常量。因此,请求result[17]

,而不是要求result[netifaces.AF_LINK]

您似乎在问,是否必须将代码分成多行以获得所需的值,答案是否定的,您可以立即执行此操作。例如,获取接口的第一个MAC地址:

>>> import netifaces
>>> result = netifaces.ifaddresses('eth0')
>>> print result[netifaces.AF_LINK][0]['addr']
c8:5b:76:14:59:ee

甚至:

>>> result = netifaces.ifaddresses('eth0')[netifaces.AF_LINK][0]['addr']
>>> print result
c8:5b:76:14:59:ee