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