【问题标题】:Python usb detectionPython USB 检测
【发布时间】:2013-11-03 10:23:23
【问题描述】:


首先对不起我的英语!

我的环境:
蟒蛇: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)和第二个事件'volume-added' 中的系统点,但我遇到Gio 添加和删除事件失败或有可疑行为取决于计算机我已在其上尝试过我的应用程序
- DBusGMainLoop (dbus.mainloop.glib) :有效,但取决于我尝试过的计算机(都在相同的配置上)启动 2 事件“DeviceAdded”,有时一个 DeviceChanged,但有时不是在插入磁盘时。

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

提前致谢。

奥雷利安。

【问题讨论】:

    标签: python linux usb detection


    【解决方案1】:

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

    【讨论】:

    • Ty,我尽快试试!
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2016-09-03
    • 2012-05-10
    • 2018-03-31
    • 2016-11-03
    • 1970-01-01
    相关资源
    最近更新 更多