интерфейсы eth0 ничто en0 ошибка списка для Mac OS - PullRequest
0 голосов
/ 03 января 2019
import netifaces as ni
ip = ni.ifaddresses("eth0")[ni.AF_INET]['addr']

ошибка

ip = ni.ifaddresses ("eth0") [ni.AF_INET] ['addr'] ValueError: Вы должны указать правильное имя интерфейса.

ip = ni.ifaddresses("en0")[ni.AF_INET]['addr']

ошибка

ip = ni.ifaddresses ("en0") [ni.AF_INET] ['addr'] Ошибка типа: индексы списка должны быть целыми числами или частями, а не str

Кто-нибудь знает, почему Mac выдает такие ошибки?

1 Ответ

0 голосов
/ 03 января 2019

Первая ошибка означает, что нет интерфейса с именем eth0.Действительно, это общее имя интерфейса в Linux, но не в MacOS.

Вторая ошибка означает, что вы пытаетесь извлечь поле, которое не существует.Есть информация о en0, но это массив, а не диктат.Это все равно что сказать "hello"["addr"], что нет способа получить доступ к "addr": th элементу последовательности.Вы, очевидно, имеете в виду что-то вроде

ip = ni.ifaddresses("en0")[ni.AF_INET][0]['addr']

, хотя нет никакого выхода из контекста, чтобы сказать, действительно ли вам нужен только один адрес.Массив, который вы получаете, представляет собой количество привязок;возможно, вам нужны все из них?

addrs = ni.ifaddresses('en0')
ips = [x['addr'] for x in addrs[ni.AF_INET]]

Документация netifaces на самом деле объясняет это довольно подробно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...