Почему python находит строку 'ens', а не 'tun' при использовании `for line в open ()` - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть следующая функция, которую я использую для проверки, существует ли интерфейс:

def status(interface):
    print("Checking VPN Status...")
    for line in open('/proc/net/dev'):
            if interface in line:
                proof = line.split(" ")[1].split()
                print(proof)
                return proof

Вот копия моего файла / proc / net / dev:

$ cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
 ens33: 1480355767 23538625   13    1    0     0          0         0 752613935 44655037    0    0    0     0       0          0
    lo: 548140418 2567168    0    0    0     0          0         0 548140418 2567168    0    0    0     0       0          0
  tun0:   17067       85     0    0    0     0          0         0   10819     114    0    0    0     0       0          0

Если я вызываю status ('ens'), я получаю правильный вывод:

['ens33:]

Но если я вызываю status ('tun'), который, как я ожидаю, будет работать, я получаю:

[]

Есть идеи, что здесь происходит?

1 Ответ

0 голосов
/ 10 декабря 2018

Строка tun0 начинается с двух пробелов, поэтому line.split(" ") возвращает ['', '', 'tun0:', ... ], что означает, что элемент 1 сам по себе является пробелом.

Если вы используете просто split(), он не будетсохраните пробел и просто вернете ['tun0:'].(В этом случае вам необходимо получить доступ к нулевому элементу вместо первого).

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