Pythonic bindings for the Handsets Android control CLI
Project description
handsets — Python bindings
A small, Pythonic wrapper around the Handsets
CLI (hs). Drives Android devices from Python without reimplementing the
subprocess + JSON-parse + exit-code boilerplate every caller used to write
by hand.
Install
pip install handsets
You also need the hs binary on $PATH. See the project
install instructions.
Usage
from handsets import Session
with Session() as d: # `hs use` on enter, `hs drop` on exit
for node in d.ui():
print(node.cls, node.text, node.coords)
d.tap("Continue") # text lookup
d.tap(540, 860) # raw coords
d.type("EditText", "you@x.com") # selector + text — atomic ACTION_SET_TEXT
d.submit()
d.wait("Welcome", timeout="15s")
Errors map to typed exceptions:
from handsets import Session, NotFound, Timeout, Ambiguous
try:
d.tap("Submit", unique=True, timeout="5s")
except NotFound:
... # exit code 2 — selector matched nothing
except Timeout:
... # exit code 3 — wait budget exhausted
except Ambiguous:
... # exit code 4 — --unique saw multiple matches
Everything else (daemon errors, bad arguments, secure-window blocks)
raises a generic HandsetsError whose .code attribute carries the
structured ErrCode enum value from the CLI's JSON output.
Talking to a specific device
Session(serial="PIXEL6_SERIAL")
Multiple sessions can run side-by-side; each one shells out independently.
Why a thin wrapper?
The CLI already does the hard work: warm daemon, push-mirrored state,
millisecond round-trips. The Python layer's job is to make that ergonomic
— context managers, typed exceptions, no manual subprocess.run. Future
versions may keep an hs run subprocess warm and stream commands over its
stdin to amortise per-call process overhead.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file handsets-0.1.2.tar.gz.
File metadata
- Download URL: handsets-0.1.2.tar.gz
- Upload date:
- Size: 7.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc8fe958601893e0b941d29c8a183fef0ca22235b91fe0b4cf795be0e8151b29
|
|
| MD5 |
72aee9d01974b7adeb21e5ae5b225869
|
|
| BLAKE2b-256 |
ba0199daafece4ac13f936a252b287c923a108a1592040d630376cb74945bef3
|
File details
Details for the file handsets-0.1.2-py3-none-any.whl.
File metadata
- Download URL: handsets-0.1.2-py3-none-any.whl
- Upload date:
- Size: 7.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e7d2f03e6a6c4caa5597033b5f76daf696c8db7b9643880be73fdb11b9350039
|
|
| MD5 |
429940a051df00af40377e6f4524c2c1
|
|
| BLAKE2b-256 |
326bdc9a42028faa912f9fe2567f190199266ed4cd71ad8a120dd19ec5aacad2
|