我知道有办法检查当前是否有互联网,但无论如何我都找不到在找到互联网时实际调用函数。这样的事情存在吗?
我使用的是 Ubuntu,不需要支持任何其他操作系统。最好是python 3。我可以安装外部库来做到这一点。
我知道有办法检查当前是否有互联网,但无论如何我都找不到在找到互联网时实际调用函数。这样的事情存在吗?
我使用的是 Ubuntu,不需要支持任何其他操作系统。最好是python 3。我可以安装外部库来做到这一点。
穷人的方式是使用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 的线程接口进行后台轮询
以前在这里回答过。
import urllib2
def internet_on(url):
try:
response=urllib2.urlopen(url,timeout=1)
return True
except urllib2.URLError as err: pass
return False