Quick Start¶
Get started with argclass in 5 minutes.
Installation¶
pip install argclass
Basic Usage¶
Define a class with type hints to create a CLI parser:
import argclass
class Greeter(argclass.Parser):
name: str # Required argument
count: int = 1 # Optional with default
greeter = Greeter()
greeter.parse_args()
print(f"Hello, {greeter.name}!" * greeter.count)
$ python greeter.py --name World --count 3
Hello, World!Hello, World!Hello, World!
Examples¶
Required and Optional Arguments¶
Arguments without defaults are required - the parser will exit with an error if they’re not provided. Arguments with defaults are optional. Type hints determine how values are parsed and validated.
import argclass
class Greeter(argclass.Parser):
name: str
count: int = 1
greeter = Greeter()
greeter.parse_args(["--name", "World", "--count", "3"])
assert greeter.name == "World"
assert greeter.count == 3
Required vs Positional Arguments¶
Important: Required arguments are not the same as positional arguments.
By default, all argclass arguments are named - they use --name value syntax,
even when required:
$ python greeter.py --name World # Named argument (default behavior)
$ python greeter.py World # Positional argument (must be explicit)
To create a positional argument (no -- prefix, identified by position),
pass the argument name without dashes as the first parameter to Argument():
import argclass
class Greeter(argclass.Parser):
name: str = argclass.Argument("name", help="Name to greet") # Positional
count: int = 1 # Named optional (--count)
greeter = Greeter()
greeter.parse_args(["World"]) # No --name needed
assert greeter.name == "World"
assert greeter.count == 1
Usage comparison:
Definition |
CLI Usage |
Type |
|---|---|---|
|
|
Named required |
|
|
Named optional |
|
|
Positional |
Help Text¶
Use argclass.Argument() to add help text that appears in --help output.
Good help text makes your CLI self-documenting and easier for users to learn.
import argclass
class Greeter(argclass.Parser):
name: str = argclass.Argument(help="Name to greet")
count: int = argclass.Argument(default=1, help="Number of times to greet")
greeter = Greeter()
greeter.parse_args(["--name", "Alice"])
assert greeter.name == "Alice"
assert greeter.count == 1
Short Aliases¶
Add short single-letter aliases like -n for frequently used arguments.
Users can then choose between --name World or the shorter -n World.
import argclass
class Greeter(argclass.Parser):
name: str = argclass.Argument("-n", "--name", help="Name to greet")
count: int = argclass.Argument("-c", "--count", default=1)
greeter = Greeter()
greeter.parse_args(["-n", "World", "-c", "3"])
assert greeter.name == "World"
assert greeter.count == 3
Usage: python greeter.py -n World -c 3
Boolean Flags¶
Boolean arguments with False defaults become flags: --verbose sets
the value to True. No value is needed - the flag’s presence is enough.
import argclass
class App(argclass.Parser):
verbose: bool = False
debug: bool = False
app = App()
app.parse_args(["--verbose", "--debug"])
assert app.verbose is True
assert app.debug is True
Usage: python app.py --verbose --debug
Multiple Values¶
Use list[T] type hints to accept multiple values. Users can provide
several values after the flag: --files a.txt b.txt c.txt.
import argclass
class FileProcessor(argclass.Parser):
files: list[str]
exclude: list[str] = []
processor = FileProcessor()
processor.parse_args(["--files", "a.txt", "b.txt", "c.txt", "--exclude", "b.txt"])
assert processor.files == ["a.txt", "b.txt", "c.txt"]
assert processor.exclude == ["b.txt"]
Usage: python processor.py --files a.txt b.txt c.txt --exclude b.txt
Environment Variables¶
Read defaults from environment variables with env_var. This is useful for
containerized deployments where configuration comes from the environment.
Tip
For secrets, use argclass.Secret(env_var="...") and call parser.sanitize_env()
after parsing. This removes secrets from the environment, preventing child
processes from accessing them. See Secrets.
import os
import argclass
os.environ["TEST_DB_HOST"] = "prod.example.com"
os.environ["TEST_DB_PORT"] = "5432"
class Database(argclass.Parser):
host: str = argclass.Argument(env_var="TEST_DB_HOST", default="localhost")
port: int = argclass.Argument(env_var="TEST_DB_PORT", default=5432)
db = Database()
db.parse_args([])
assert db.host == "prod.example.com"
assert db.port == 5432
# Cleanup
del os.environ["TEST_DB_HOST"]
del os.environ["TEST_DB_PORT"]
Usage: TEST_DB_HOST=prod.example.com python app.py
Quick Reference¶
Pattern |
Syntax |
Result |
|---|---|---|
Required arg |
|
|
Optional arg |
|
|
Positional arg |
|
|
Boolean flag |
|
|
Multiple values |
|
|
Help text |
|
Shows in |
Short alias |
|
|
Env variable |
|
Reads from |
Next Steps¶
Complete walkthrough of all features with practical examples.
Load defaults from INI, JSON, or TOML configuration files.
Detailed argument configuration: types, choices, validators.
Complete API documentation for all classes and functions.