Skip to content

Instantly share code, notes, and snippets.

@furbrain
Created May 16, 2020 12:18
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 furbrain/7ab706c638955b5f5202ac83e9049fef to your computer and use it in GitHub Desktop.
Save furbrain/7ab706c638955b5f5202ac83e9049fef to your computer and use it in GitHub Desktop.
Wrapper for using usbip with specific programs
#!/usr/bin/env python3
import subprocess
import re
import sys
if sys.platform=="linux":
USBIP_EXEC = ["sudo", "/usr/bin/usbip"]
else:
USBIP_EXEC = ["C:\summat"]
PORTS = ["3240", "3241"]
SERVER = "192.168.1.28"
VENDOR = sys.argv[1]
PRODUCT = sys.argv[2]
TARGET = sys.argv[3]
def get_bus_id():
search_string = "^(.*?):.*{vendor}:{product}".format(vendor=VENDOR, product=PRODUCT)
for port in PORTS:
output = subprocess.run(USBIP_EXEC + ["--tcp-port", port, "list", "-r", SERVER], stdout=subprocess.PIPE)
for line in output.stdout.decode('utf8').splitlines():
match = re.search(search_string, line)
if match:
bus_id = match.group(1)
print("Found match on port {port}, bus_id {bus_id}".format(port=port, bus_id=bus_id))
return port, bus_id
print("No remote found")
return None, None
def get_port():
search_string = "Port (\d\d).*?{vendor}:{product}".format(vendor=VENDOR, product=PRODUCT)
output = subprocess.run(USBIP_EXEC + ["port"], stdout=subprocess.PIPE)
match = re.search(search_string, output.stdout.decode('utf8'),re.DOTALL)
if match:
port = match.group(1)
print("Connection found on port: ", port)
return port
else:
print("No port found")
return None
def attach(port, bus_id):
print("Attaching to {b}".format(b=bus_id))
res = subprocess.run(USBIP_EXEC + ["--tcp-port", port, "attach", "-r", SERVER, "-b", bus_id], stdout=subprocess.PIPE)
print("Attachment output: ", res.stdout)
def detach(port):
res = subprocess.run(USBIP_EXEC + ["--tcp-port", port, "detach", "-p", port], stdout=subprocess.PIPE)
print("Detaching output: ", res)
port, bus_id = get_bus_id()
if bus_id is None:
print ("Device not found")
else:
attach(port, bus_id.strip())
subprocess.run(TARGET)
port = get_port()
if port is not None:
detach(port)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment