Интерфейсы eth0 ничто en0 ошибка списка для Mac OS
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'] TypeError: списочные индексы должны быть целыми или кусочками, а не str
Кто-нибудь знает, почему Mac выдает такие ошибки?
1 ответ
Первая ошибка означает, что нет интерфейса с именем eth0
, Действительно, это общее имя интерфейса в Linux, но не в MacOS.
Вторая ошибка означает, что вы пытаетесь извлечь поле, которое не существует. Есть информация о en0
но это массив, а не диктат. Это как сказать "hello"["addr"]
нет доступа к "addr"
элемент последовательности. Вы явно имеете в виду что-то вроде
ip = ni.ifaddresses("en0")[ni.AF_INET][0]['addr']
хотя нет никакого выхода из контекста, чтобы сказать, действительно ли вам нужен только один адрес. Массив, который вы получаете, представляет собой количество привязок; возможно вы хотите их всех?
addrs = ni.ifaddresses('en0')
ips = [x['addr'] for x in addrs[ni.AF_INET]]
netifaces
документация объясняет это довольно подробно.