2014-03-31 45 views
0

我一直摸索了一會兒,這是纏繞了我...這是很容易在C#/如何獲得USB序列號蟒蛇

不管怎麼說..我發現這個代碼,這是最接近我得到了,但是我吮吸正則表達式,所以如果有人能爲我縮小這個範圍,所以它只隔離每個設備的設備ID,那就太棒了!不管怎麼說,這裏是代碼:

import re 
import subprocess 

device_re = re.compile("Bus\s+(?P<bus>\d+)\s+Device\s+(?P<device>\d+).+ID\s(?P<id> \w+:\w+)\s(?P<tag>.+)$", re.I) 
df = subprocess.check_output("lsusb", shell=True) 
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 
+0

任何人都可以嗎? – amartin94

+0

試着看看udev和D-Bus的東西。 – yegorich

回答

1

下面的代碼只給你的設備ID。

import pprint 
import subprocess 

df = subprocess.check_output('lsusb', shell=True) 
device_ids = [] 
for line in filter(lambda s: s.startswith('Bus'), df.split('\n')): 
    businfo, id, _ = line.split(':') 
    id = id.split()[1] 
    device_ids.append(id) 

pprint.pprint(device_ids) 
1

試試這個方法:

import re 
import subprocess 
device_re = re.compile("Bus\s+(?P<bus>\d+)\s+Device\s+(?P<device>\d+).+ID\s(?P<id>\w+:\w+)\s(?P<tag>.+)$", re.I) 
df = subprocess.check_output("lsusb", shell=True) 
for i in df.split('\n'): 
    if i: 
     info = device_re.match(i) 
     if info: 
      dinfo = info.groupdict() 
      # Uncomment if you wish tags too 
      #print dinfo.pop('tag') 
      print dinfo.pop('id')