在我的Python程序中,我需要不断检查是否有新的USB驱动器连接到我的设备,运行x86 Linux(Ubuntu)。 其他USB设备不应该被误认为是USB驱动器,例如键盘,鼠标或其他任何东西。 这样做的最佳方式是什么?
在我的特定情况下,我有一个由运行Linux的x86单板PC驱动的自定义媒体播放器设备。
答案 0 :(得分:1)
大多数Linux系统已经有一些机制可以检测新的usb设备并在它们是存储设备时自动安装它们,依此类推。你可以做的是使用python与 inotify 库的接口来监视/ 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()
当您运行并重新创建/ 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不是递归的,因此只返回监视目录中的直接更改。