2012-08-16 92 views
3

我的問題是,我想捕獲python腳本中的系統事件。如果電纜插入網絡設備,並且計算機連接到這個網絡,我想處理這個事件,啓動一個功能(因爲在這一刻默認網關正在改變,我需要認識到這一點)。有沒有一個模塊這樣做?使用python捕獲系統事件

我需要的東西,如:

if class.network_connect_event(): 
     do some stuff 

此事件的處理與Windows和Unix系統的正常工作。

感謝

編輯:

我真正需要的是一些方法來識別USB網絡設備。它對於我在插入時識別它非常重要,並獲得它的IP地址。

回答

1

您可以通過監聽dbus事件來做到這一點。

從命令行開始使用dbus-monitor進行試驗。從我的筆記本電腦(Ubuntu)斷開eth0時的示例:

$ 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綁定來收聽這些事件。我不熟悉如何做到這一點的細節,但有tutorials

編輯:

試試這個包:http://packages.python.org/python-networkmanager/(聲明:我還沒有嘗試過)。

編輯2:

我沒有注意到,你需要Windows和Unix。在Windows上,您將不得不尋找另一種方式(因爲在Windows上不使用dbus)。

+0

是啊,這聽起來不錯...我會嘗試..但窗口的compability是基本的 – HappyHacking 2012-08-16 18:58:08