IronPythonとWMIを使って、接続しているUSBデバイスの列挙
IronPythonの良い所は、ちょっくらテストが簡単に出来る事だよな。と思いつつ、
ちょっくら勉強していたのでメモ。
#!/usr/bin/env python # coding: cp932 import sys import clr clr.AddReference("System.Management") from System.Management import * from System.IO import * from System.IO.Ports import * def get_usb_device(): """単純なUSBデバイスの列挙 """ ret = [] o = ManagementObjectSearcher() o.Query.QueryString = "Select * from Win32_USBControllerDevice" for a in o.Get(): print "-----" print a["Dependent"] e = ManagementObject(a["Dependent"]) for v in e.Properties: print v.Name, "=", v.Value ret.append((e["Name"], e["DeviceID"], e["Service"], e["Manufacturer"])) return ret def get_usb_tree(): """USBコントローラ毎のUSBデバイスを列挙する """ o = ManagementObjectSearcher() o.Query.QueryString = "Select * from Win32_USBController" for a in o.Get(): print a["Name"], a["Status"] for b in a.GetRelationships ("Win32_USBControllerDevice"): e = ManagementObject(b["Dependent"]) print " ", e["Name"], "=", e["Service"] def main(): #print get_usb_device() get_usb_tree() if __name__=="__main__": main()
以下、実行結果例:
$ ipy test.py Intel(R) 82801EB USB Universal Host Controller - 24D2 OK USB ルート ハブ = usbhub Intel(R) 82801EB USB Universal Host Controller - 24D4 OK USB ルート ハブ = usbhub Intel(R) 82801EB USB Universal Host Controller - 24D7 OK USB ルート ハブ = usbhub USB 大容量記憶装置デバイス = USBSTOR I-O DATA USB Flash Disk USB Device = disk 汎用ボリューム = None Intel(R) 82801EB USB Universal Host Controller - 24DE OK USB ルート ハブ = usbhub USB ヒューマン インターフェイス デバイス = HidUsb HID 準拠ゲーム コントローラ = None 標準エンハンス PCI to USB ホスト コントローラ OK USB ルート ハブ = usbhub USB 大容量記憶装置デバイス = USBSTOR Apple iPod USB Device = disk