6


首先对不起我的英语!

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

上下文:
我必须检测 USB 硬盘驱动器何时插入或拔出并对其执行一些操作。
例如,当插入磁盘时,我想获取安装点(例如:/media/usb0)和系统点(例如:/dev/sdb1)。我需要两条路径,并且我不想进行像(子进程:mount -l)这样的系统调用。

我尝试了几种方法:
- pyudev:仅在 EVT_DEVICE_ADDED 上获取系统路径(如 /dev/sdb1)
- Gio(gi.repository):使用“mount-added”(如 /media/usb0)和系统点在第二个事件“添加量”,但我有 Gio 添加和删除事件失败或可疑行为取决于计算机我已经尝试过我的应用程序
- DBusGMainLoop(dbus.mainloop.glib):有效但取决于我试过的电脑(都在相同的配置上)启动 2 事件“DeviceAdded”,有时一个 DeviceChanged,但有时不是在插入磁盘时。

您是否知道一种方法(可能是我暴露的 3 个中的一个,我做了坏事)来检测 USB 磁盘何时插入,调用一个方法并在此方法中获取我需要的 2 个路径?

提前致谢。

奥雷利安。

4

1 回答 1

3

我用它来检查连接的 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 相关的代码

于 2013-10-25T08:22:33.683 回答