Quick Start¶
Async API¶
import asyncio
from cli_to_py import convert
async def main():
uv = await convert("uv")
result = await uv.add(_=["httpx"], dev=True)
print(result.stdout)
proc = await uv.spawn("sync", verbose=True)
async for line in proc:
print(line)
asyncio.run(main())
Keyword arguments become flags:
api.command_string("commit", message="fix", all=True)
# git commit --message fix --all
Snake case becomes kebab case:
await git.diff(name_only=True, _=["HEAD~1"])
# git diff --name-only HEAD~1
Single-character keyword arguments become short flags:
api.command_string(n=True, _=["pattern"])
# grep -n pattern
Sync API¶
from cli_to_py import convert_sync
git = convert_sync("git")
result = git.status(short=True)
branch = git.branch(show_current=True).text()
Static Help Text¶
Use static help text when you want parsing and validation without spawning a binary during conversion.
from cli_to_py import from_help_text_sync
api = from_help_text_sync("mytool", """\
Usage: mytool [options] <file>
Options:
-v, --verbose enable verbose output
--output <dir> output directory
""")
errors = api.validate(outpt="./dist")