Я получил сообщение об ошибке версии Python при установке appium с помощью 'npm install -g appium@1.8.1'

netifaces доступен через pip и easy_install.

netifaces имеет некоторые странности на разных платформах:

  • Интерфейс localhost / loop-back может не всегда включаться (Cygwin).
  • Адреса указаны для каждого протокола (например, IPv4, IPv6), а протоколы перечислены для каждого интерфейса. В некоторых системах (Linux) каждая пара протокольных интерфейсов имеет свой собственный связанный интерфейс (с использованием нотации interface_name: n), а в других системах (Windows) один интерфейс будет иметь список адресов для каждого протокола. В обоих случаях есть список протоколов, но он может содержать только один элемент.

Вот какой код netifaces для воспроизведения:

import netifaces

PROTO = netifaces.AF_INET   # We want only IPv4, for now at least

# Get list of network interfaces
# Note: Can't filter for 'lo' here because Windows lacks it.
ifaces = netifaces.interfaces()

# Get all addresses (of all kinds) for each interface
if_addrs = [netifaces.ifaddresses(iface) for iface in ifaces]

# Filter for the desired address type
if_inet_addrs = [addr[PROTO] for addr in if_addrs if PROTO in addr]

iface_addrs = [s['addr'] for a in if_inet_addrs for s in a if 'addr' in s]
# Can filter for '127.0.0.1' here.

Вышеприведенный код не отображает адрес обратно в его имя интерфейса (полезно для генерации правил ebtables / iptables на лету). Итак, вот версия, которая хранит вышеуказанную информацию с именем интерфейса в кортеже:

import netifaces

PROTO = netifaces.AF_INET   # We want only IPv4, for now at least

# Get list of network interfaces
ifaces = netifaces.interfaces()

# Get addresses for each interface
if_addrs = [(netifaces.ifaddresses(iface), iface) for iface in ifaces]

# Filter for only IPv4 addresses
if_inet_addrs = [(tup[0][PROTO], tup[1]) for tup in if_addrs if PROTO in tup[0]]

iface_addrs = [(s['addr'], tup[1]) for tup in if_inet_addrs for s in tup[0] if 'addr' in s]

И нет, я не влюблен в понимание списков. Это как раз то, как мой мозг работает в наши дни.

Следующий фрагмент распечатает все:

from __future__ import print_function  # For 2.x folks
from pprint import pprint as pp

print('\nifaces = ', end='')
pp(ifaces)

print('\nif_addrs = ', end='')
pp(if_addrs)

print('\nif_inet_addrs = ', end='')
pp(if_inet_addrs)

print('\niface_addrs = ', end='')
pp(iface_addrs)

Наслаждайтесь!

0
задан Heri Susilo 21 February 2019 в 05:11
поделиться

1 ответ

Это вызвано неправильной версией python в npm. Измените его на python2, чтобы решить эту проблему.

npm config set python python2.7
0
ответ дан Jade 21 February 2019 в 05:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: