Для тех людей, которые не хотят дополнительной зависимости и не любят вызывать подпроцессы, вот как вы делаете это самостоятельно, читая /proc/net/route
напрямую:
import socket, struct
def get_default_gateway_linux():
"""Read the default gateway directly from /proc."""
with open("/proc/net/route") as fh:
for line in fh:
fields = line.strip().split()
if fields[1] != '00000000' or not int(fields[3], 16) & 2:
continue
return socket.inet_ntoa(struct.pack("<L", int(fields[2], 16)))
У меня нет машины с прямым порядком байтов для тестирования, поэтому я не уверен, зависит ли порядковый номер от вашей архитектуры процессора, но если это так, замените <
в struct.pack('<L', ...
на =
так что код будет использовать машинный порядок байтов.