Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ntamas/aio-usb-hotplug
Asynchronous USB hotplug event generator for Python 3.7 and above
https://github.com/ntamas/aio-usb-hotplug
asyncio curio hotplug python python-library trio usb
Last synced: about 1 month ago
JSON representation
Asynchronous USB hotplug event generator for Python 3.7 and above
- Host: GitHub
- URL: https://github.com/ntamas/aio-usb-hotplug
- Owner: ntamas
- License: mit
- Created: 2019-11-19T13:17:49.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2024-04-12T08:43:14.000Z (7 months ago)
- Last Synced: 2024-09-14T09:34:16.053Z (2 months ago)
- Topics: asyncio, curio, hotplug, python, python-library, trio, usb
- Language: Python
- Homepage: https://github.com/ntamas/aio-usb-hotplug
- Size: 195 KB
- Stars: 1
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# aio-usb-hotplug
`aio-usb-hotplug` is a Python library that provides asynchronous generators
yielding detected hotplug events on the USB buses.Requires Python >= 3.8.
Works with [`asyncio`](https://docs.python.org/3/library/asyncio.html)
and [`trio`](https://trio.readthedocs.io/en/stable/).## Installation
Use the package manager [pip](https://pip.pypa.io/en/stable/) to install
`aio-usb-hotplug`.```bash
pip install aio-usb-hotplug
````aio-usb-hotplug` depends on [PyUSB](https://pypi.org/pypi/pyusb), which
in turn requires [libusb](https://libusb.info) or
[openusb](https://sourceforge.net/projects/openusb/). An easy way to satisfy
this requirement is to install
[libusb-package](https://pypi.org/pypi/libusb-package), which supplies
pre-compiled binaries for most platforms:```bash
pip install libusb-package
````aio-usb-hotplug` will make use of
[libusb-package](https://pypi.org/pypi/libusb-package) if it is installed in
the current Python environment.## Usage
### Dump all hotplug events related to a specific USB device
```python
from aio_usb_hotplug import HotplugDetector
from trio import run # ...or asyncioasync def dump_events():
detector = HotplugDetector.for_device(vid="1050", pid="0407")
async for event in detector.events():
print(repr(event))trio.run(dump_events)
```### Run an async task for each USB device matching a VID/PID pair
```python
from aio_usb_hotplug import HotplugDetector
from trio import sleep_foreverasync def handle_device(device):
print("Handling device:", repr(device))
try:
# Do something meaningful with the device. The task gets cancelled
# when the device is unplugged.
await sleep_forever()
finally:
# Device unplugged or an exception happened
print("Stopped handling device:", repr(device))async def handle_detected_devices():
detector = HotplugDetector.for_device(vid="1050", pid="0407")
await detector.run_for_each_device(handle_device)trio.run(handle_detected_devices)
```## Contributing
Pull requests are welcome. For major changes, please open an issue first to
discuss what you would like to change.Please make sure to update tests as appropriate.
## License
[MIT](https://choosealicense.com/licenses/mit/)