Ловить системные события с помощью Python

Моя проблема в том, что я хочу перехватывать системные события в скрипте Python. Если кабель подключен к сетевому устройству и компьютер подключен к этой сети, я хочу обработать это событие, запустив функцию (потому что в этот момент меняется шлюз по умолчанию, и мне нужно это распознать). Есть ли модуль, делающий это?

мне нужно что-то вроде:

if class.network_connect_event():
        do some stuff

Эта обработка событий должна работать с окнами и системой 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 для прослушивания этих событий. Я не знаком с деталями о том, как это сделать, но есть учебники.

РЕДАКТИРОВАТЬ:

Попробуйте этот пакет: http://packages.python.org/python-networkmanager/ (отказ от ответственности: я не пробовал).

РЕДАКТИРОВАТЬ 2:

Я не заметил, что вам нужны Windows и Unix. В Windows вам придется найти другой путь (поскольку dbus не используется в Windows).

Другие вопросы по тегам