GNU/Linux >> Linux の 問題 >  >> Linux

Python でわかりやすいデバイス名を取得する

Windows:WMI から USB 情報を取得できますが、管理者である必要があります。例は .NET にありますが、Python WMI モジュールを使用できるはずです。これにより、有用な情報が含まれている可能性のある USB 識別文字列にアクセスできるようになります。 FTDI シリアル デバイスの場合、特権アクセスを必要としない FTDI の DLL を使用するショートカットがあります。

Linux:利用可能なすべての情報は /sys/bus/usb の下にあります 、および udev からも入手できます。これは良い答えのようです。


これは古い投稿であることは知っていますが、今日は苦労していました。最終的には、Windows マシンを使用しているため、Python 用の wmi ライブラリを使用しました (申し訳ありませんが、私の答えは Windows にのみ適用されることはわかっていますが、役立つかもしれません)

最初に pip を使用してパッケージをインストールします:

pip install wmi

次に

import wmi
c = wmi.WMI()
wql = "Select * From Win32_USBControllerDevice"
for item in c.query(wql):
    print item.Dependent.Caption

次のような結果になるはずです:

<ブロック引用>

USBルートハブ
USBルートハブ
豊富な USB-to-Serial Comm Port (COM9)USB ルート ハブ
USBルートハブ
USB 複合デバイス
USB ビデオ デバイスUSB オーディオ デバイス
USBルートハブ
...中略...

この場合、キャプションを文字列解析して COM ポートを見つける必要があります。商品だけでもご覧いただけます。関連するキャプション以外の USB デバイスの他の属性を表示する依存オブジェクト:

instance of Win32_PnPEntity
{
    Caption = "USB Root Hub";
    ClassGuid = "{36fc9e60-c465-11cf-8056-444553540000}";
    ConfigManagerErrorCode = 0;
    ConfigManagerUserConfig = FALSE;
    CreationClassName = "Win32_PnPEntity";
    Description = "USB Root Hub";
    DeviceID = "USB\\ROOT_HUB\\4&32F13EF0&1";
    HardwareID = {"USB\\ROOT_HUB&VID8086&PID3A36&REV0000",     
                "USB\\ROOT_HUB&VID8086&PID3A36", "USB\\ROOT_HUB"};
    Manufacturer = "(Standard USB Host Controller)";
    Name = "USB Root Hub";
    PNPDeviceID = "USB\\ROOT_HUB\\4&32F13EF0&1";
    Service = "usbhub";
    Status = "OK";
    SystemCreationClassName = "Win32_ComputerSystem";
    SystemName = "001fbc0934d1";
};

Linux に関しては、デバイスを列挙することだけが必要な場合は、プロジェクトの pyudev 依存関係をスキップして、/sbin/udevadm info --export-db の出力を単純に解析することもできます。 コマンド (ルート権限は必要ありません)。 USB デバイスの USB 製品 ID を含む、現在のデバイスとクラスに関するすべての情報をダンプします。これは、USB-to-serial アダプターを識別するのに十分なはずです。もちろん、これは pyudev で行うこともできます。


少なくとも Linux では、デバイスを接続する前と後に "ls /dev | grep ttyUSB" の出力を調べるなどして、いくつかのダミー ハックを使用して /dev ノードを特定できます。これは、OSXの場合にも何らかの形で適用される必要があります。 subprocess.Popen() コマンドなどを使用してこれらのコマンドを検査することをお勧めします。ウィンドウに関しては、これが役立つかもしれません。


Linux
  1. 開発用のデバイスをセットアップします (???????????? パーミッションなし)

  2. Linux がすべてのネットワーク インターフェイス名を取得する

  3. MODULE_DEVICE_TABLE(usb, id_table) の使い方を理解するのに苦労しました

  1. 使用可能なすべてのネットワーク インターフェイスのデバイス名のみを一覧表示する

  2. デバイスを USB 3 ポートに接続したことを確認するにはどうすればよいですか?

  3. 再起動後も v4l2 USB カメラを同じデバイス名にバインドする方法は?

  1. 4Linuxで接続されたUSBデバイス名を知るための便利な方法

  2. USBデバイスプラグインでカスタムスクリプトを実行する方法は?

  3. USB バージョン 1.1 または 2.0 を確認する方法