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

时间:2018-12-23 09:30:42

标签: 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 | findstr /i "Gateway"')
    print dgw

但是dgw变量没有保存我的默认网关...

python 2.7

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

这在documentation中也突出显示了:

  

导入的与操作系统有关的模块的名称。当前已经注册了以下名称:'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。