3

私の問題は、Python スクリプトでシステム イベントをキャッチしたいということです。ケーブルがネットワーク デバイスに接続され、コンピューターがこのネットワークに接続されている場合、このイベントを処理して機能を開始したいと考えています (この時点でデフォルト ゲートウェイが変更されているため、これを認識する必要があるため)。これを行うモジュールはありますか?

私は次のようなものが必要です:

if class.network_connect_event():
        do some stuff

このイベント処理は、Windows および Unix システムで動作する必要があります。

ありがとう

編集:

私が本当に必要としているのは、USB ネットワーク デバイスを識別する方法です。プラグインされたときにそれを識別し、そのIPアドレスを取得することは私にとって重要です.

4

1 に答える 1

1

これは、おそらく dbus イベントをリッスンすることで実行できます。

dbus-monitorコマンド ラインからを使用して実験を開始します。eth0 を切断したときのラップトップ (Ubuntu) の例:

$ dbus-monitor --system
...
... # lots of events scroll by, including the ones below
...
signal sender=:1.6 -> dest=(null destination) serial=1275 path=/org/freedesktop/NetworkManager/Devices/0; interface=org.freedesktop.NetworkManager.Device.Wired; member=PropertiesChanged
   array [
      dict entry(
         string "State"
         variant             uint32 70
      )  
   ]  
signal sender=:1.6 -> dest=(null destination) serial=1289 

path=/org/freedesktop/NetworkManager/ActiveConnection/1; interface=org.freedesktop.NetworkManager.Connection.Active; member=PropertiesChanged
   array [
      dict entry(
         string "Default"
         variant             boolean true
      )
      dict entry(
         string "State"
         variant             uint32 2
      )
   ]

これらのイベントをリッスンするには、Python dbus バインディングを使用できるはずです。これを行う方法の詳細に精通していませんが、チュートリアルがあります。

編集:

このパッケージを試してください: http://packages.python.org/python-networkmanager/ (免責事項: 私は試していません)。

編集2:

Windows と Unix が必要なことに気付きませんでした。Windows では、別の方法を見つける必要があります (Windows では dbus が使用されないため)。

于 2012-08-16T15:25:12.923 に答える