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 client のようなもの と、いくつかの仕様を読むことが役に立ちます。

バックグラウンド ポーリングにも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 に答える