1

我知道有办法检查当前是否有互联网,但无论如何我都找不到在找到互联网时实际调用函数。这样的事情存在吗?

我使用的是 Ubuntu,不需要支持任何其他操作系统。最好是python 3。我可以安装外部库来做到这一点。

4

2 回答 2

1

穷人的方式是使用ping 模块进行轮询

import ping, time

def found():
    print("FOUND INTERNET! :)")
def lost():
    print("LOST INTERNET! :(")

def wait_and_notify_connection(found, lost, already_found=False):
    while True:
        # Ping Google DNS Server (99.999% Uptime)
        if ping.do_one('8.8.8.8', timeout=2, psize=64) is not None:                
            if not already_found:
                found()
                already_found = True
        else:
            if already_found:
                lost()
                already_found = False
        time.sleep(1)

wait_and_notify_connection(found, lost)

或子进程调用

import subprocess, time

def found():
    print("FOUND INTERNET! :)")
def lost():
    print("LOST INTERNET! :(")

def ping(target):
    return True if subprocess.call(['ping', '-c 1', target]) == 0 else False

def wait_and_notify_connection(found, lost, already_found=False):
    while True:
        # Ping Google DNS Server (99.999% Uptime)
        # and check return code
        if ping('8.8.8.8'):
            if not already_found:
                found()
                already_found = True
        else:
            if already_found:
                lost()
                already_found = False
        time.sleep(1)

wait_and_notify_connection(found, lost)

但正如@Blender 提到的,D-Bus 通知可以更好地工作。NetworkManager D-Bus Python 客户端和阅读一些规范之类的东西 可能会有所帮助。

您也可以使用 Python 的线程接口进行后台轮询

于 2013-02-26T05:35:20.477 回答
-2

以前在这里回答过。

import urllib2

def internet_on(url):
    try:
        response=urllib2.urlopen(url,timeout=1)
        return True
    except urllib2.URLError as err: pass
    return False
于 2013-02-26T05:03:33.817 回答