GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Angezeigte Gerätenamen in Python abrufen

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.


Linux
  1. Wie führt man benutzerdefinierte Skripts auf dem USB-Geräte-Plug-in aus?

  2. Linux – Udev benennt USB-Ethernet-Gerät nicht um?

  3. Gerät für Entwicklung einrichten (???????????? keine Berechtigungen)

  4. Linux erhält alle Netzwerkschnittstellennamen

  5. Es ist schwierig, die Verwendung von MODULE_DEVICE_TABLE (usb, id_table) zu verstehen

Erkennen Sie mehr Geräte unter Linux mit diesem USB-ID-Repository

Linux-lsusb-Befehl - Drucken Sie Informationen über USB auf dem System

Wiederherstellen des beschädigten USB-Laufwerks in den ursprünglichen Zustand unter Linux

So ermitteln Sie die Bandbreitennutzung von USB-Geräten unter Linux

So verwenden Sie ein USB-Laufwerk unter Debian 10

Wie binde ich v4l2 USB-Kameras auch nach dem Neustart an dieselben Gerätenamen?