Python的USB检测

先抱歉我的英文!

我的环境:
python:2.7.3
wxwidgets:2.9.4-1
wxpython:2.9.4-1
Ubuntu的:12.04

上下文:
我必须检测何时插入或拔出USB硬盘驱动器,并执行一些操作。
例如,当我插入磁盘来获取挂载点(例如:/ media / usb0)和系统点(例如:/ dev / sdb1)时。 我需要两个path,我不想像(subprocess:mount -l)进行系统调用。

我尝试了几种方法:
– pyudev:只获取EVT_DEVICE_ADDED上的系统path(如/ dev / sdb1)
– Gio(gi.repository):获取mount-added(像/ media / usb0)和系统点在第二个事件'增加卷'的挂载点,但我有问题与Gio添加和删除事件失败或有嫌疑行为取决于电脑我已经试过我的应用程序
– DBusGMainLoop(dbus.mainloop.glib):工作,但取决于计算机我试过了(所有在相同的configuration)启动2事件'DeviceAdded',有时一个DeviceChanged但有时不是当磁盘插入时。

你知道一种方式(也许3我暴露,我已经做了一些坏东西之一)来检测何时插入一个USB磁盘,调用一个方法,在这种方法得到2我需要的path?

提前致谢。

的Aurelien。

我用它来检查连接的USB设备:

要求

  • pyusb

import usb from usb.core import USBError ### Some auxiliary functions ### def _clean_str(s): ''' Filter string to allow only alphanumeric chars and spaces @param s: string @return: string ''' return ''.join([c for c in s if c.isalnum() or c in {' '}]) def _get_dev_string_info(device): ''' Human readable device's info @return: string ''' try: str_info = _clean_str(usb.util.get_string(device, 256, 2)) str_info += ' ' + _clean_str(usb.util.get_string(device, 256, 3)) return str_info except USBError: return str_info def get_usb_devices(): ''' Get USB devices @return: list of tuples (dev_idVendor, dev_idProduct, dev_name) ''' return [(device.idVendor, device.idProduct, _get_dev_string_info(device)) for device in usb.core.find(find_all=True) if device.idProduct > 2] 

我希望它有帮助! 我在这里还有一些与USB相关的代码