接続されたUSBデバイス情報をPythonでどのように問い合わせることができますか?
UIDデバイス名(例:SonyEricsson W660)、デバイスへのパス(例:/ dev/ttyACM0)
また、接続したときにデバイスを識別するために使用される上記の情報のうち、最も優れたパラメータは何ですか? (UID?)
私はUbuntu 11.04で作業しています。
ATM私はこのコードを持っています(pyUSBを使って)
busses = usb.busses()
for bus in busses:
devices = bus.devices
for dev in devices:
print repr(dev)
print "Device:", dev.filename
print " idVendor: %d (0x%04x)" % (dev.idVendor, dev.idVendor)
print " idProduct: %d (0x%04x)" % (dev.idProduct, dev.idProduct)
print "Manufacturer:", dev.iManufacturer
print "Serial:", dev.iSerialNumber
print "Product:", dev.iProduct
問題は、私は希望の出力を得ることができない、1つの例を貼り付ける:
Device:
idVendor: 4046 (0x0fce)
idProduct: 53411 (0xd0a3)
Manufacturer: 1
Serial: 3
Product: 2
最初に私はファイル名を取得しません、それは私にとって最も重要です。私はそれが/
dev/ttyACM0などの部分だと仮定しています。次に、すべてのUSBデバイスのUIDがあったか、またはベンダーIDと製品IDの両方を使用する必要がありますか?
編集:明らかにセットアップに関する問題がありますが、間違ったUSBライブラリを使用していると思います。
(libusb0.1を使用)ATM。だから私はDevice(dev.filename)文字列を空にする。誰かが、どのオペレーティングシステムでUSBライブラリを使用しているのか、PyUSBのどのバージョンを使用しているのか、自分の問題を解決できると思ってください。
ベストアンサー
私はこのような簡単なコードを考えることができます。
Since all USB ports can be accessed via /dev/bus/usb/< bus
>/< device >
生成されたIDについては、デバイスのプラグを抜いて再接続しても(他のポートになる可能性もあります)それは同じになります。
import re
import subprocess
device_re = re.compile("Buss+(?Pd+)s+Devices+(?Pd+).+IDs(?Pw+:w+)s(?P.+)$", re.I)
df = subprocess.check_output("lsusb")
devices = []
for i in df.split('n'):
if i:
info = device_re.match(i)
if info:
dinfo = info.groupdict()
dinfo['device'] = '/dev/bus/usb/%s/%s' % (dinfo.pop('bus'), dinfo.pop('device'))
devices.append(dinfo)
print devices
サンプル出力は次のようになります。
[
{'device': '/dev/bus/usb/001/009', 'tag': 'Apple, Inc. Optical USB Mouse [Mitsumi]', 'id': '05ac:0304'},
{'device': '/dev/bus/usb/001/001', 'tag': 'Linux Foundation 2.0 root hub', 'id': '1d6b:0002'},
{'device': '/dev/bus/usb/001/002', 'tag': 'Intel Corp. Integrated Rate Matching Hub', 'id': '8087:0020'},
{'device': '/dev/bus/usb/001/004', 'tag': 'Microdia ', 'id': '0c45:641d'}
]