通过Python检测特定接口的internet
我正在寻找一种解决方案来检查特定接口(eth0、wlan0等)是否具有internet 我的情况如下;我有两个活动连接。一个没有互联网的以太网连接(eth0)和一个有互联网的无线连接(wlan0)。双方都从各自的DHCP服务器接收到局域网IP 我已经得出结论,但我非常愿意接受建议,即最好的解决办法是: 使用ping命令:通过Python检测特定接口的internet,python,Python,我正在寻找一种解决方案来检查特定接口(eth0、wlan0等)是否具有internet 我的情况如下;我有两个活动连接。一个没有互联网的以太网连接(eth0)和一个有互联网的无线连接(wlan0)。双方都从各自的DHCP服务器接收到局域网IP 我已经得出结论,但我非常愿意接受建议,即最好的解决办法是: 使用ping命令: ping -I wlan0 -c 3 www.google.com 无论Python是否被接收,我都能够到达目的地(检查“目标主机不可访问”) 然而,这并不能产生最好的结果,
ping -I wlan0 -c 3 www.google.com
无论Python是否被接收,我都能够到达目的地(检查“目标主机不可访问”)
然而,这并不能产生最好的结果,我真的需要一些帮助
谢谢 text变量打印出pint命令输出,只是在print命令输出中查找文本不起作用 是的,因为您不捕获stderr,您可以将stderr重定向到stdout,您也可以调用communicate来等待进程完成并获得输出:
p = subprocess.Popen(command, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
out,_ = p.communicate()
您也可以只使用check_调用,这将为任何非零退出状态引发错误:
from subprocess import check_call, CalledProcessError, PIPE
def is_reachable(inter, i, add):
command = ["ping", "-I", inter, "-c", i, add]
try:
check_call(command, stdout=PIPE)
return True
except CalledProcessError as e:
print e.message
return False
如果只想捕获某个错误,可以检查返回代码
def is_reachable(inter, i, add):
command = ["ping", "-I", inter, "-c", i, add]
try:
check_call(command, stdout=PIPE)
return True
except CalledProcessError as e:
if e.returncode == 1:
return False
raise
“然而,这并不能产生最佳结果”。你能告诉我们结果如何吗?然后告诉我们你认为最好的结果是什么?例如,具体问题是什么?text变量打印出pint命令输出,只是在打印命令输出中查找文本不起作用。我感谢您非常详细的回答,非常抱歉,我无法使此工作。我道歉。我收回这句话,它很好用。非常感谢。
def is_reachable(inter, i, add):
command = ["ping", "-I", inter, "-c", i, add]
try:
check_call(command, stdout=PIPE)
return True
except CalledProcessError as e:
if e.returncode == 1:
return False
raise