我想将默认网关保存在变量中,以供将来使用,例如打印它或向其发送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
答案 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。