Python usb检测

时间:2013-10-24 15:44:38

标签: python linux usb detection


首先抱歉我的英语!

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

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

我尝试了几种方法:
- pyudev:只获取EVT_DEVICE_ADDED上的系统路径(如/ dev / sdb1)
- Gio(gi.repository):使用'mount-added'(如/ media / usb0)获取挂载点,并在第二个事件'volume-added'中获取系统点但是我在Gio添加和删除事件失败时遇到问题或怀疑行为取决于计算机我已经尝试过我的应用程序
- DBusGMainLoop(dbus.mainloop.glib):工作但依赖于计算机我试过它(所有在相同的配置上)启动2事件'DeviceAdded',有时一个DeviceChanged但有时不是在插入磁盘时。
< / p>

你知道一种方式(可能是我暴露的3个中的一个,我做了一些坏事)来检测插入usb磁盘的时间,调用方法并在这个方法中得到我需要的2路径吗?

提前致谢。

的Aurelien。

1 个答案:

答案 0 :(得分: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内容相关的代码here