USB驱动器检测(Linux)

时间:2015-08-27 06:18:04

标签: python linux usb usb-drive

在我的Python程序中,我需要不断检查是否有新的USB驱动器连接到我的设备,运行x86 Linux(Ubuntu)。 其他USB设备不应该被误认为是USB驱动器,例如键盘,鼠标或其他任何东西。 这样做的最佳方式是什么?

在我的特定情况下,我有一个由运行Linux的x86单板PC驱动的自定义媒体播放器设备。

1 个答案:

答案 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不是递归的,因此只返回监视目录中的直接更改。