6


まず私の英語でごめんなさい!

私の環境:
python:2.7.3
wxwidgets:2.9.4-1
wxpython:2.9.4-1
ubuntu:12.04

context :
USB ハードドライブが接続または切断されたことを検出し、何らかのアクションを実行する必要があります。
たとえば、ディスクが接続されている場合、マウント ポイント (例:/media/usb0) とシステム ポイント (例:/dev/sdb1) を取得したいと考えています。2 つのパスの両方が必要で、(subprocess : mount -l) のようなシステム コールを実行したくありません。

- pyudev
: EVT_DEVICE_ADDED (/dev/sdb1 など) のシステム パスのみを取得します
。 2番目のイベント「ボリュームが追加されました」のシステムポイントですが、Gioの追加および削除イベントに問題があり、失敗するか、コンピューターに依存する疑わしい動作があります。アプリケーションを試しました
- DBusGMainLoop (dbus.mainloop.glib):コンピューターで試してみました(すべて同じ構成で)2つのイベント「DeviceAdded」を起動し、1つのDeviceChangedを起動しますが、ディスクが接続されていない場合もあります。

USBディスクが接続されていることを検出し、メソッドを呼び出し、このメソッドで必要な2つのパスを取得する方法を知っていますか(おそらく私が公開した3つのうちの1つ、私は何か悪いことをしました)?

前もって感謝します。

オーレリアン。

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 に答える