Ловить системные события с помощью 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).