Windows:Sie können USB-Informationen von WMI abrufen, aber Sie müssen Administrator sein. Die Beispiele sind in .NET, aber Sie sollten das Python-WMI-Modul verwenden können. Dadurch erhalten Sie Zugriff auf USB-Identifikationszeichenfolgen, die nützliche Informationen enthalten können. Für serielle FTDI-Geräte gibt es eine Abkürzung mit der DLL von FTDI, die keinen privilegierten Zugriff erfordert.
Linux:Alle verfügbaren Informationen befinden sich unter /sys/bus/usb
, und auch über udev verfügbar. Das sieht nach einer guten Antwort aus.
Ich weiß, dass dies ein älterer Beitrag ist, aber ich hatte heute Probleme damit. Letztendlich habe ich die wmi-Bibliothek für Python verwendet, da ich auf einem Windows-Computer bin (sorry, ich weiß, dass meine Antwort nur für Windows gilt, aber vielleicht hilft es jemand).
Installieren Sie das Paket zuerst mit Pip:
pip install wmi
dann
import wmi
c = wmi.WMI()
wql = "Select * From Win32_USBControllerDevice"
for item in c.query(wql):
print item.Dependent.Caption
Sollte so etwas ergeben wie:
Usb Verteiler
Usb Verteiler
Produktiver USB-to-Serial-Comm-Port (COM9)USB-Root-Hub
Usb Verteiler
USB-Verbundgerät
USB-VideogerätUSB-Audiogerät
Usb Verteiler
...schnipsen...
In diesem Fall müssten Sie die Caption-Zeichenfolge parsen, um den COM-Port zu finden. Sie können sich auch nur den Artikel ansehen. Abhängiges Objekt, um andere Attribute des USB-Geräts neben Caption anzuzeigen, die für Sie relevant sein könnten:
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";
};
Wenn Sie unter Linux nur Geräte auflisten müssen, können Sie sogar die pyudev-Abhängigkeit für Ihr Projekt überspringen und einfach die Ausgabe von /sbin/udevadm info --export-db
parsen Befehl (erfordert keine Root-Rechte). Es werden alle Informationen über vorhandene Geräte und Klassen ausgegeben, einschließlich USB-Produkt-IDs für USB-Geräte, die mehr als ausreichen sollten, um Ihre USB-zu-Seriell-Adapter zu identifizieren. Das geht natürlich auch mit pyudev.
Zumindest für Linux können Sie einige Dummy-Hacks verwenden, um Ihren /dev-Knoten zu bestimmen, indem Sie beispielsweise die Ausgabe von "ls /dev | grep ttyUSB" überprüfen, bevor und nachdem Sie Ihr Gerät anschließen. Dies muss irgendwie auch für den OSX-Fall gelten. Eine gute Idee ist es, diese Befehle mit etwas wie dem Befehl subprocess.Popen() zu untersuchen. Was Windows betrifft, könnte dies hilfreich sein.