在我的 Python 程序中,我需要不断检查是否有新的 USB 驱动器连接到我的设备,运行 x86 Linux (Ubuntu)。 不要将其他 USB 设备误认为是 USB 驱动器,例如键盘、鼠标或其他任何设备。 执行此操作的最佳方法是什么?
在我的特殊情况下,我有一个自定义媒体播放器设备,该设备由运行 Linux 的 x86 单板 PC 提供支持。
最佳答案
大多数 linux 系统已经有一些机制可以检测新的 USB 设备并自动挂载它们(如果它们是存储设备)等等。您可以做的是使用 python 的 inotify 库接口(interface)来监控/mnt 或/dev。
要查看它是如何工作的,请安装 inotify-tools
或一些类似的命名包,您可以执行以下操作:
$ inotifywait -m -e create /tmp &
此命令监视 (-m)/tmp 以创建 (-e create) 新文件或目录。
例如 touch/tmp/x
会输出
/tmp/ CREATE x
您可以从 python 及其 python-inotify
或类似包中执行相同的操作。
有 pyinotify
命令,但更有用的是您可以编写等效的 python 程序:
import pyinotify
wm = pyinotify.WatchManager()
notifier = pyinotify.Notifier(wm)
wm.add_watch('/tmp', pyinotify.IN_CREATE)
notifier.loop()
当您 rm 并重新创建/tmp/x 时,会打印:
<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 不是递归的,因此只返回直接在监视目录中的更改。
关于python - USB 驱动器检测 (Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32241987/