Windows:informace o USB můžete získat z WMI, ale musíte být správce. Příklady jsou v .NET, ale měli byste být schopni používat modul Python WMI. To vám umožní přístup k USB identifikačním řetězcům, které mohou obsahovat užitečné informace. Pro sériová zařízení FTDI existuje zkratka pomocí knihovny DLL FTDI, která nevyžaduje privilegovaný přístup.
Linux:všechny dostupné informace jsou pod /sys/bus/usb
a také dostupné prostřednictvím udev. Vypadá to jako dobrá odpověď.
Vím, že toto je starší příspěvek, ale dnes jsem s tím měl problémy. Nakonec jsem použil knihovnu wmi pro python, protože jsem na počítači s Windows (omlouvám se, vím, že moje odpověď platí pouze pro Windows, ale možná to pomůže někdo).
Nejprve nainstalujte balíček pomocí pip:
pip install wmi
pak
import wmi
c = wmi.WMI()
wql = "Select * From Win32_USBControllerDevice"
for item in c.query(wql):
print item.Dependent.Caption
Výsledkem by mělo být něco jako:
USB Root Hub
USB Root Hub
Plodný USB-to-sériový komunikační port (COM9)Kořenový rozbočovač USB
USB Root Hub
Kompozitní USB zařízení
USB video zařízeníUSB audio zařízení
USB Root Hub
...stříhat...
V tomto případě byste museli analyzovat řetězec Caption, abyste našli COM port. Můžete se také podívat pouze na položku. Závislý objekt pro zobrazení dalších atributů zařízení USB vedle Caption, které mohou být relevantní:
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";
};
Pokud jde o Linux, pokud vše, co potřebujete, je vyjmenovat zařízení, můžete dokonce přeskočit závislost pyudev pro váš projekt a jednoduše analyzovat výstup /sbin/udevadm info --export-db
příkaz (nevyžaduje oprávnění root). Vypíše všechny informace o současných zařízeních a třídách, včetně ID produktů USB pro zařízení USB, což by mělo být více než dostatečné k identifikaci vašich adaptérů USB-to-serial. Samozřejmě to můžete udělat také pomocí pyudev.
Alespoň pro linux můžete použít některé fiktivní hacky k určení vašeho /dev uzlu, například kontrolou výstupu "ls /dev | grep ttyUSB" před a po připojení zařízení. To nějak musí platit i pro případ OSX. Dobrý nápad je zkontrolovat tyto příkazy pomocí něčeho jako příkaz subprocess.Popen(). Pokud jde o Windows, může to být užitečné.