現在インターネットがあるかどうかを確認する方法があることは知っていますが、インターネットが見つかったときに実際に関数を呼び出す方法が見つかりませんでした。このようなものは存在しますか?
私は 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 client のようなもの と、いくつかの仕様を読むことが役に立ちます。
バックグラウンド ポーリングにもPython のスレッド インターフェイスを使用できます。
import urllib2
def internet_on(url):
try:
response=urllib2.urlopen(url,timeout=1)
return True
except urllib2.URLError as err: pass
return False