Home

Awesome

Python wrapper for uhubctl

This is a simple Python wrapper for uhubctl

Examples

Discover all usable USB hubs

import uhubctl

hubs = uhubctl.discover_hubs()

for hub in hubs:
    print(f"Found hub: {hub}")

    for port in hub.ports:
        print(f"   Found port: {port}")

Create hub and enumerate attached ports

import uhubctl

hub = Hub("1-1", enumerate_ports=True)

# Iterate all ports
for port in hub.ports:
    print(f"Found port: {port}")

# Get port by port number
port_2 = hub.find_port(2)
print(f"The status of port 2 is {port_2.status}")

Manually specify hub and port

from uhubctl import Hub, Port

hub = Hub("1-1")
hub.add_port(1)

Control ports

from uhubctl import Hub, Port

hub = Hub("1-1")
port = hub.add_port(1)

print("Switch port 1-1.1 off")
port.status = False

print("Switch port 1-1.1 on")
port.status = True

print("Get port 1-1.1 status")
print(port.status)

Device details

import uhubctl

hubs = uhubctl.discover_hubs()

for hub in hubs:
    print(f"Found hub: {hub}")

    for port in hub.ports:
        print(f"   Found port: {port}")
        
        # You can use the optional argument `cached_results=False` for each of 
        # these 3 methods in order to invalidate the internal cache,
        # which is used for performance reasons
        print(f"      Description: {port.description()}")
        print(f"      Vendor ID: {port.vendor_id()}")
        print(f"      Product ID: {port.product_id()}")

FAQ

How can I specify the path to ´uhubctl´

import uhubctl

uhubctl.utils.UHUBCTL_BINARY = "sudo /usr/local/bin/uhubctl"