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() コマンドなどを使用してこれらのコマンドを検査することをお勧めします。ウィンドウに関しては、これが役立つかもしれません。