通过Python检测特定接口的internet

通过Python检测特定接口的internet,python,Python,我正在寻找一种解决方案来检查特定接口(eth0、wlan0等)是否具有internet 我的情况如下;我有两个活动连接。一个没有互联网的以太网连接(eth0)和一个有互联网的无线连接(wlan0)。双方都从各自的DHCP服务器接收到局域网IP 我已经得出结论,但我非常愿意接受建议,即最好的解决办法是: 使用ping命令: ping -I wlan0 -c 3 www.google.com 无论Python是否被接收,我都能够到达目的地(检查“目标主机不可访问”) 然而,这并不能产生最好的结果,

我正在寻找一种解决方案来检查特定接口(eth0、wlan0等)是否具有internet

我的情况如下;我有两个活动连接。一个没有互联网的以太网连接(eth0)和一个有互联网的无线连接(wlan0)。双方都从各自的DHCP服务器接收到局域网IP

我已经得出结论,但我非常愿意接受建议,即最好的解决办法是:

使用ping命令:

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