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会出现此类错误吗?
答案 0 :(得分:1)
第一个错误意味着没有名为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
documentation实际上对此进行了详细解释。