GNU/Linux >> Tutoriales Linux >  >> Linux

Obtener nombres de dispositivos amigables en python

Windows:puede extraer información USB de WMI, pero debe ser administrador. Los ejemplos están en .NET, pero debería poder usar el módulo Python WMI. Esto le dará acceso a cadenas de identificación USB, que pueden contener información útil. Para los dispositivos seriales FTDI, existe un atajo usando la DLL de FTDI, que no requiere acceso privilegiado.

Linux:toda la información disponible está bajo /sys/bus/usb , y también disponible a través de udev. Esto parece una buena respuesta.


Sé que esta es una publicación anterior, pero tuve problemas hoy. Finalmente, utilicé la biblioteca wmi para python ya que estoy en una máquina con Windows (lo siento, sé que mi respuesta solo se aplica a Windows, pero tal vez ayude alguien).

Instale el paquete usando pip primero:

pip install wmi

entonces

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

Debería dar como resultado algo como:

Coneccion casera para el USB
Coneccion casera para el USB
Puerto de comunicación prolífico de USB a serie (COM9)Hub raíz USB
Coneccion casera para el USB
Dispositivo compuesto USB
Dispositivo de video USBDispositivo de audio USB
Coneccion casera para el USB
...cortar...

En este caso, tendría que analizar en cadena el título para encontrar el puerto COM. También puede echar un vistazo solo al artículo. Objeto dependiente para ver otros atributos del dispositivo USB junto al Título que puede encontrar relevante:

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

Con respecto a Linux, si todo lo que necesita es enumerar dispositivos, puede incluso omitir la dependencia de pyudev para su proyecto y simplemente analizar la salida de /sbin/udevadm info --export-db comando (no requiere privilegios de root). Volcará toda la información sobre los dispositivos y clases actuales, incluidos los ID de productos USB para dispositivos USB, que deberían ser más que suficientes para identificar sus adaptadores de USB a serie. Por supuesto, también puedes hacer esto con pyudev.


Al menos para Linux, puede usar algunos trucos ficticios para determinar su nodo /dev, inspeccionando, por ejemplo, la salida de "ls /dev | grep ttyUSB" antes y después de conectar su dispositivo. Esto de alguna manera debe aplicarse también para el caso de OSX. Una buena idea es inspeccionar esos comandos usando algo como el comando subprocess.Popen(). En cuanto a Windows, esto podría ser útil.


Linux
  1. Linux:¿Udev no cambia el nombre del dispositivo USB Ethernet?

  2. Linux:¿cómo volver a conectar un dispositivo USB desconectado lógicamente?

  3. configurar dispositivo para desarrollo (???????????? sin permisos)

  4. Linux obteniendo todos los nombres de interfaz de red

  5. Dificultad para comprender el uso de MODULE_DEVICE_TABLE (usb, id_table)

Reconozca más dispositivos en Linux con este repositorio de ID USB

Comando lsusb de Linux - Imprimir información sobre USB en el sistema

Restaurar la unidad USB dañada al estado original en Linux

Cómo encontrar el uso de ancho de banda del dispositivo USB en Linux

Cómo usar una unidad USB en Debian 10

¿Cómo vincular cámaras USB v4l2 a los mismos nombres de dispositivo incluso después de reiniciar?