argparse-usage
Generate usage KDL files from Python's argparse.ArgumentParser.
This library converts Python argparse definitions to the usage spec format, enabling automatic generation of:
- Markdown documentation
- Manpages
- Shell completions (bash, fish, zsh, powershell, nu)
Installation
pip install argparse-usage
# or
uv add argparse-usage
Usage
import argparse
import argparse_usage
# Create your ArgumentParser as usual
parser = argparse.ArgumentParser(
prog='mycli',
description='My CLI tool',
)
parser.add_argument('-v', '--verbose', action='count', default=0, help='Increase verbosity')
parser.add_argument('-f', '--force', action='store_true', help='Force operation')
parser.add_argument('files', nargs='+', help='Files to process')
# Add subcommands
subparsers = parser.add_subparsers(dest='command')
build_cmd = subparsers.add_parser('build', help='Build project')
test_cmd = subparsers.add_parser('test', help='Run tests')
# Generate usage spec
spec = argparse_usage.generate(
parser,
name='My CLI',
version='1.0.0',
author='Your Name',
)
print(spec)
Output:
// @generated by argparse-usage from Python argparse
name "My CLI"
bin "mycli"
version "1.0.0"
author "Your Name"
about "My CLI tool"
arg "<files>..." help="Files to process" var=#true var_min=1
flag "-v --verbose" help="Increase verbosity" default="0" count=#true
flag "-f --force" help="Force operation" default=#false
cmd build {
// options
}
cmd test {
// options
}
Generating Documentation
Save the spec and use the usage CLI to generate documentation:
# Save spec to file
python mycli.py --usage-spec > mycli.usage.kdl
# Generate markdown documentation
usage generate markdown --file mycli.usage.kdl --out-file README.md
# Generate shell completions
usage generate completion bash mycli --file mycli.usage.kdl > mycli-completion.bash
Supported Features
Flags (optional arguments)
| argparse action | usage spec mapping |
|---|---|
action='store_true' |
flag "--force" default=#false |
action='store_false' |
flag "--quiet" default=#true |
action='count' |
flag "-v --verbose" count=#true |
nargs='*' |
flag "--files..." var=#true |
nargs='+' |
flag "--tags..." var=#true var_min=1 |
choices=[...] |
flag "--format" { arg "<format>" { choices "json" "yaml" } } |
Arguments (positional)
| argparse nargs | usage spec mapping |
|---|---|
nargs=None (default) |
arg "<file>" |
nargs='?' |
arg "[file]" |
nargs='*' |
arg "[files]..." var=#true |
nargs='+' |
arg "<files>..." var=#true var_min=1 |
nargs=N |
arg "<coords>..." var_min=N var_max=N |
Parent Parsers
Inheritance from parent parsers is supported:
parent_parser = argparse.ArgumentParser(add_help=False)
parent_parser.add_argument('-v', '--verbose', action='count')
parser = argparse.ArgumentParser(parents=[parent_parser])
Subcommands
Nested subcommands are fully supported:
subparsers = parser.add_subparsers()
add_cmd = subparsers.add_parser('add')
add_cmd.add_argument('name')
Output:
cmd add {
arg "<name>"
}
API Reference
generate(parser, name=None, version=None, author=None, bin_name=None)
Generate a usage spec KDL string from an ArgumentParser.
Parameters:
parser(ArgumentParser): The ArgumentParser instance to convertname(str, optional): Friendly name for the CLI (defaults to parser.prog)version(str, optional): Version of the CLIauthor(str, optional): Author of the CLIbin_name(str, optional): Binary name (defaults to parser.prog)
Returns:
str: KDL-formatted usage spec string
Examples
See the examples/ directory for complete examples:
- basic_usage.py - Basic usage with flags, args, and subcommands
- complex_usage.py - Complex CLI with nested subcommands (config, database, deploy)
For information on setting up shell completions, see the examples README.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Metadata
Release files for argparse-usage 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| argparse_usage-0.1.1.tar.gz | 5.8 kB | With provenance | Details for argparse_usage-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| argparse_usage-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for argparse_usage-0.1.1-py3-none-any.whl |
Total release size: 13.0 kB
Release files / argparse_usage-0.1.1.tar.gz
| Download URL | argparse_usage-0.1.1.tar.gz |
|---|---|
| Size | 5.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e143fcb38048e1ea331ca9abf4171fa06f7bae075cc7720029a0003016c189a1
|
|
BLAKE2b-256 checksum How to use checksums |
2ec948d58c7c1bd72f75ccaa92ff9504ac25bacc84fb3f7a2dfacb03240d3937
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 8, 2026.
Transparency logRelease files / argparse_usage-0.1.1-py3-none-any.whl
| Download URL | argparse_usage-0.1.1-py3-none-any.whl |
|---|---|
| Size | 7.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
eff437314084ecd9e4b099602da32136339f20f6e6259ffeaef2a706910cc319
|
|
BLAKE2b-256 checksum How to use checksums |
46ccf4e68943e03024916c8c5296112347b6323408c0d4105330c1865840017a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 8, 2026.
Transparency logSecurity for argparse-usage 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for argparse_usage-0.1.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 8, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.