Найти адрес шлюза по умолчанию для Windows и Linux на python - PullRequest
0 голосов
/ 23 декабря 2018

Я хочу сохранить шлюз по умолчанию в переменной для будущего использования, например, распечатать его, или отправить на него пинг .... Я хочу, чтобы код работал в Windows и Linux, поэтому я ухудшаю этот код:

import os
if os.name == "Linux":
    dgw = os.system('ip r | grep default | awk {"print $3"}')
    print dgw
if os.name == "Windows":
    dgw = os.system('ifconfig | findstr /i "Gateway"')
    print dgw

Но переменная dgw не сохраняет мой шлюз по умолчанию ...

python 2.7

Ответы [ 2 ]

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

Во-первых, os.name для Windows - 'nt', а для Linux - 'posix'.

Это также выделено в документации :

Имя импортированного зависимого модуля операционной системы.В настоящее время зарегистрированы следующие имена: 'posix', 'nt', 'java'.

Если вы хотите использовать более конкретные платформы, используйте sys.platform.лучший вариант.

Во-вторых, использование модуля netifaces хорошо работает для Windows и Linux:

import netifaces
gateways = netifaces.gateways()
default_gateway = gateways['default'][netifaces.AF_INET][0]
print(default_gateway)

, который можно установить с помощью pip install netifaces.Преимущество этого подхода заключается в том, что вам не нужно разграничивать подходы между Windows и Linux.

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

Это потому, что os.system не возвращает стандартный вывод.Вы должны использовать подпроцесс.

#For Linux
import subprocess
p = subprocess.Popen(["ip r"], stdout=subprocess.PIPE, shell=True)
out = p.stdout.read()
print out
...