Skip to content

Instantly share code, notes, and snippets.

@cryzed
Created June 14, 2018 19:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cryzed/167c380c3bc18309d116bb78c45cb3ad to your computer and use it in GitHub Desktop.
Save cryzed/167c380c3bc18309d116bb78c45cb3ad to your computer and use it in GitHub Desktop.
import argparse
import re
import subprocess
argument_parser = argparse.ArgumentParser()
argument_parser.add_argument('name')
LSUSB_PATTERN = re.compile(
r'Bus (?P<bus>\d{3}) Device (?P<device>\d{3}): ID (?P<id>[a-z0-9]{4}:[a-z0-9]{4}) (?P<name>.*)')
def udevadm_get_properties(name):
output = subprocess.run(
['udevadm', 'info', '-n', name, '-q', 'property'], stdout=subprocess.PIPE,
universal_newlines=True)
return dict(line.split('=', 1) for line in output.stdout.splitlines())
def lsusb():
output = subprocess.run(['lsusb'], stdout=subprocess.PIPE, universal_newlines=True)
return [LSUSB_PATTERN.match(line).groupdict() for line in output.stdout.splitlines()]
def main(arguments):
properties = udevadm_get_properties(arguments.name)
query_id = '{}:{}'.format(properties['ID_VENDOR'], properties['ID_MODEL'])
lsusb_by_id = {device['id']: device for device in lsusb()}
device = lsusb_by_id[query_id]
print('/dev/bus/usb/{}/{}'.format(device['bus'], device['device']))
if __name__ == '__main__':
arguments = argument_parser.parse_args()
argument_parser.exit(main(arguments))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment