2015-08-27 2 views
1

В моей программе Python мне нужно постоянно проверять, подключен ли к моему устройству новый USB-накопитель, работающий под управлением x86 Linux (Ubuntu). Другие USB-устройства не должны ошибочно приниматься за USB-накопитель, например, клавиатуры, мыши или что-то еще. Каков наилучший способ сделать это?Обнаружение USB-накопителя (Linux)

В моем конкретном случае у меня есть пользовательское устройство медиаплеера, работающее на одноплатном ПК x86 под управлением Linux.

ответ

0

Большинство систем Linux уже имеют механизм, который обнаруживает новые устройства USB и автоматически монтирует их, если они являются устройствами хранения, и так далее. Что вы можете сделать, так это использовать интерфейс python для библиотеки inotify для мониторинга/mnt или/dev.

Чтобы увидеть, как это работает, установите inotify-tools или некоторый подобный пакет с именем, и вы можете сделать:

$ inotifywait -m -e create /tmp & 

Эта команда контролирует (-m)/TMP для создания (-e создания) новых файлов или каталоги. Например touch /tmp/x и будет выводить

/tmp/ CREATE x 

Вы можете сделать то же самое с питоном и его python-inotify или аналогичного пакета. Существует команда pyinotify, но с большей пользой можно закодировать эквивалентную программу питона:

import pyinotify 
wm = pyinotify.WatchManager() 
notifier = pyinotify.Notifier(wm) 
wm.add_watch('/tmp', pyinotify.IN_CREATE) 
notifier.loop() 

При гт и воссоздают/TMP/х это печатает:

<Event dir=False mask=0x100 maskname=IN_CREATE name=x path=/tmp pathname=/tmp/x wd=1 > 

Смотрите wiki для учебника и т.д.


в вашем случае вы можете отслеживать /mnt для обнаружения вновь смонтированных файловых систем, или /dev - Откройте для себя новые устройства, такие как /dev/sdb и /dev/sdb1. Inotify не является рекурсивным, поэтому возвращаются только изменения непосредственно в наблюдаемом каталоге.

Смежные вопросы