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.