`argparse` — Command-Line Argument Parsing
Python · Standard Library · Run with python3
Explanation
`argparse` builds fully-featured CLI parsers from Python code. It auto-generates `--help` output, handles type conversion (`type=int`), choices validation (`choices=["debug","info","warn"]`), required vs optional arguments, subcommands (`add_subparsers`), and mutually exclusive groups. `nargs` controls how many values an argument consumes: `"?"` = 0 or 1, `"*"` = 0+, `"+"` = 1+, `N` = exactly N.
Real-World Scenario
A data processing CLI: `process.py --input data.csv --output results.json --verbose --workers 4`. `argparse` validates that `--workers` is an integer, that `--input` exists (add `type=argparse.FileType("r")`), and generates help text without any boilerplate. ```python import argparse import sys def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser( description="Process files with configurable workers", formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) parser.add_argument("input", help="Input file path") parser.add_argument("-o", "--output", default="output.json", help="Output file") parser.add_argument("-w", "--workers", type=int, default=4, metavar="N") parser.add_argument("-v", "--verbose", action="store_true") parser.add_argument( "--log-level", choices=["debug", "info", "warning", "error"], default="info", ) return parser # Simulate running with args (don't block stdin in example) args = build_parser().parse_args(["data.csv", "-w", "8", "--verbose"]) print(f"Input: {args.input}") print(f"Workers: {args.workers}") print(f"Verbose: {args.verbose}") ```
Quick Snippet
import argparse
import sys
def build_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(
description="Process files with configurable workers",
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)
parser.add_argument("input", help="Input file path")
parser.add_argument("-o", "--output", default="output.json", help="Output file")
parser.add_argument("-w", "--workers", type=int, default=4, metavar="N")
parser.add_argument("-v", "--verbose", action="store_true")
parser.add_argument(
"--log-level",
choices=["debug", "info", "warning", "error"],
default="info",
)
return parser
# Simulate running with args (don't block stdin in example)
args = build_parser().parse_args(["data.csv", "-w", "8", "--verbose"])
print(f"Input: {args.input}")
print(f"Workers: {args.workers}")
print(f"Verbose: {args.verbose}")Full Example
# Compile: python3 argparse_basics.py
# Output:
# Input: data.csv
# Workers: 8
# Verbose: True
import argparse
def build_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(
description="Process files with configurable workers",
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)
parser.add_argument("input", help="Input file path")
parser.add_argument("-o", "--output", default="output.json", help="Output file")
parser.add_argument("-w", "--workers", type=int, default=4, metavar="N")
parser.add_argument("-v", "--verbose", action="store_true")
parser.add_argument(
"--log-level",
choices=["debug", "info", "warning", "error"],
default="info",
)
return parser
args = build_parser().parse_args(["data.csv", "-w", "8", "--verbose"])
print(f"Input: {args.input}")
print(f"Workers: {args.workers}")
print(f"Verbose: {args.verbose}")
print(f"Output: {args.output}")
print(f"Log level: {args.log_level}")
python3 argparse_basics.py