GNU/Linux >> Linux Esercitazione >  >> Linux

Ottenere nomi di dispositivi amichevoli in Python

Windows:puoi estrarre le informazioni USB da WMI, ma devi essere amministratore. Gli esempi sono in .NET, ma dovresti essere in grado di usare il modulo Python WMI. Questo ti darà accesso alle stringhe di identificazione USB, che possono contenere informazioni utili. Per i dispositivi seriali FTDI esiste una scorciatoia che utilizza la DLL di FTDI, che non richiede l'accesso privilegiato.

Linux:tutte le informazioni disponibili sono in /sys/bus/usb e disponibile anche tramite udev. Questa sembra una buona risposta.


So che questo è un post più vecchio, ma oggi stavo lottando con esso. Alla fine ho usato la libreria wmi per Python dato che sono su una macchina Windows (scusa, so che la mia risposta si applica solo a Windows, ma forse sarà d'aiuto qualcuno).

Installa prima il pacchetto usando pip:

pip install wmi

quindi

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

Dovrebbe risultare con qualcosa come:

Hub radice USB
Hub radice USB
Porta di comunicazione da USB a seriale prolifica (COM9) Hub principale USB
Hub radice USB
Dispositivo composito USB
Dispositivo video USB Dispositivo audio USB
Hub radice USB
...taglia...

In questo caso, dovresti eseguire l'analisi delle stringhe della didascalia per trovare la porta COM. Puoi anche dare un'occhiata solo all'articolo. Oggetto dipendente per visualizzare altri attributi del dispositivo USB accanto a Caption che potresti trovare pertinenti:

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";
};

Per quanto riguarda Linux, se tutto ciò di cui hai bisogno è enumerare i dispositivi, puoi persino saltare la dipendenza pyudev per il tuo progetto e analizzare semplicemente l'output di /sbin/udevadm info --export-db comando (non richiede privilegi di root). Scaricherà tutte le informazioni sui dispositivi e le classi presenti, inclusi gli ID prodotto USB per i dispositivi USB, che dovrebbero essere più che sufficienti per identificare i tuoi adattatori da USB a seriale. Ovviamente puoi farlo anche con pyudev.


Almeno per Linux, puoi usare alcuni hack fittizi per determinare il tuo nodo /dev, ispezionando ad esempio l'output di "ls /dev | grep ttyUSB" prima e dopo aver collegato il tuo dispositivo. Questo in qualche modo deve valere anche per il caso OSX. Una buona idea è ispezionare quei comandi usando qualcosa come il comando subprocess.Popen(). Per quanto riguarda Windows, questo potrebbe essere utile.


Linux
  1. 4 Modo utile per conoscere il nome del dispositivo USB collegato in Linux

  2. Linux – Udev non rinomina il dispositivo USB Ethernet?

  3. Linux:come riconnettere un dispositivo USB disconnesso logicamente?

  4. Elenca solo i nomi dei dispositivi di tutte le interfacce di rete disponibili

  5. Come posso essere sicuro di aver collegato un dispositivo a una porta USB 3?

Riconosci più dispositivi su Linux con questo repository di ID USB

Comando Linux lsusb - Stampa informazioni su USB sul sistema

Ripristina l'unità USB danneggiata allo stato originale in Linux

Come trovare l'utilizzo della larghezza di banda del dispositivo USB su Linux

Come utilizzare un'unità USB su Debian 10

Come determinare la versione USB 1.1 o 2.0