CodeNebula
Python📦Standard Libraryintermediate

`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

snippet.py
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

argparse_basics.py
# 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}")
Run command
python3 argparse_basics.py