GNU/Linux >> Tutoriels Linux >  >> Linux

Obtenir des noms de périphériques conviviaux en python

Windows :vous pouvez extraire les informations USB de WMI, mais vous devez être administrateur. Les exemples sont en .NET, mais vous devriez pouvoir utiliser le module Python WMI. Cela vous donnera accès aux chaînes d'identification USB, qui peuvent contenir des informations utiles. Pour les périphériques série FTDI, il existe un raccourci utilisant la DLL de FTDI, qui ne nécessite pas d'accès privilégié.

Linux :toutes les informations disponibles sont sous /sys/bus/usb , et également disponible via udev. Cela ressemble à une bonne réponse.


Je sais que c'est un article plus ancien, mais j'avais du mal avec ça aujourd'hui.En fin de compte, j'ai utilisé la bibliothèque wmi pour python car je suis sur une machine Windows (désolé, je sais que ma réponse ne s'applique qu'à Windows, mais peut-être que ça va aider quelqu'un).

Installez d'abord le package en utilisant pip :

pip install wmi

puis

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

Devrait donner quelque chose comme :

Hub usb racine
Hub usb racine
Port de communication USB-série prolifique (COM9)Hub racine USB
Hub usb racine
Périphérique composite USB
Périphérique vidéo USBPériphérique audio USB
Hub usb racine
...couper...

Dans ce cas, vous devrez analyser la chaîne Caption pour trouver le port COM. Vous pouvez également jeter un œil uniquement à l'article. Objet dépendant pour voir d'autres attributs du périphérique USB à côté de Légende que vous pourriez trouver pertinents :

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

En ce qui concerne Linux, si tout ce dont vous avez besoin est d'énumérer les périphériques, vous pouvez même ignorer la dépendance pyudev pour votre projet et simplement analyser la sortie de /sbin/udevadm info --export-db commande (ne nécessite pas de privilèges root). Il videra toutes les informations sur les périphériques et les classes actuels, y compris les ID de produit USB pour les périphériques USB, ce qui devrait être plus que suffisant pour identifier vos adaptateurs USB-série. Bien sûr, vous pouvez également le faire avec pyudev.


Au moins pour Linux, vous pouvez utiliser des hacks factices pour déterminer votre nœud /dev, en inspectant par exemple la sortie de "ls /dev | grep ttyUSB" avant et après avoir connecté votre appareil. Cela doit en quelque sorte s'appliquer également au cas OSX. Une bonne idée est d'inspecter ces commandes en utilisant quelque chose comme la commande subprocess.Popen(). En ce qui concerne les fenêtres, cela pourrait être utile.


Linux
  1. Linux – Comment reconnecter un périphérique USB logiquement déconnecté ?

  2. Linux récupère tous les noms d'interface réseau

  3. Difficile de comprendre l'utilisation de MODULE_DEVICE_TABLE (usb, id_table)

  4. Répertorier uniquement les noms de périphérique de toutes les interfaces réseau disponibles

  5. Obtenir la consommation d'énergie d'un périphérique USB

Reconnaître plus d'appareils sous Linux avec ce référentiel d'ID USB

Commande Linux lsusb - Imprimer des informations sur l'USB sur le système

Restaurer une clé USB corrompue à son état d'origine sous Linux

Comment trouver l'utilisation de la bande passante d'un périphérique USB sous Linux

Comment utiliser une clé USB sur Debian 10

Comment lier les caméras USB v4l2 aux mêmes noms de périphérique même après le redémarrage ?