在python上查找Windows和Linux的默认网关地址

在python上查找Windows和Linux的默认网关地址,python,networking,gateway,Python,Networking,Gateway,我想将默认网关保存在一个变量中,以备将来使用,例如打印它,或向它发送ping。。。。 我希望代码能在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 | finds

我想将默认网关保存在一个变量中,以备将来使用,例如打印它,或向它发送ping。。。。 我希望代码能在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变量没有保存我的默认网关


Python2.7这是因为os.system不返回标准输出。 您应该使用子进程

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

首先,Windows的
os.name
'nt'
,Linux是
'posix'

这一点在以下内容中也得到了强调:

导入的操作系统相关模块的名称。以下名称当前已注册:“posix”、“nt”、“java”

如果您想针对更具体的平台,使用是更好的选择

其次,在Windows和Linux上使用该模块效果良好:

import netifaces
gateways = netifaces.gateways()
default_gateway = gateways['default'][netifaces.AF_INET][0]
print(default_gateway)
您可以使用
pip install
安装它。这种方法的好处是不需要区分Windows和Linux

可能重复的