2017-03-24 6 views
1

Das hört sich vielleicht dumm an, aber ehrlich gesagt habe ich keine Ahnung, wie ich es richtig machen soll. Ich putze jetzt schon seit einiger Zeit in Python herum. Ich möchte einen Zugang zu einem Wörterbuch von neififaces (Mac-Adresse einer bestimmten Netzwerkkarte) erhalten, einen Eintrag importieren und dann als elegante Zeichenfolge drucken. Ich habe ein Problem, einen eleganten Weg zu finden.Elegante Möglichkeit, auf Wörterbücher von netifix zuzugreifen

Hier ist, was ich bisher habe:

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

I richtigen Wert von Mac-Adresse erhalten wie folgt dargestellt:

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

ich nur Mac Adressteil (als String) importieren müssen so ich versuchte, es in einer Art eleganter Art und Weise zu bekommen, aber beste, was ich tun könnte, ist:

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

Und ich (als e RWARTETE):

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

Also hier habe ich beschlossen, einige ernsthafte Inception-Stil-Codierung, um zu versuchen, die im Wesentlichen funktioniert, aber es ist auf jeden Fall nicht elegant und einfach ...

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

So erhalte ich:

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

Dann habe ich:

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

Dann bekomme ich (endlich) meine Mac-Adresse ... Gibt es eine elegante Möglichkeit, diese Mac-Adresse zu bekommen, ohne dass mein Code so aussieht?

Antwort

1

Erstens, nennen Sie nicht Ihre Variablen string oder str, weil Sie jetzt eingebaute Python-Typen und Module maskieren und eines Tages, das Sie beißen wird.

Zweitens sind die Schlüssel im Wörterbuch, die von netiface.ifaddresses zurückgegeben werden, Protokollnummern, und es gibt im Modul netifaces benannte Konstanten für jede von diesen. Fragen Sie statt result[17] nach result[netifaces.AF_LINK].

Es scheint, als ob Sie fragen, ob Sie Ihren Code über mehrere Zeilen aufteilen müssen, um den gewünschten Wert zu erhalten, die Antwort ist nein, Sie können das alles auf einmal tun. Z. B, die erste MAC-Adresse einer Schnittstelle zu erhalten:

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

Oder auch:

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