Lab 11: CLI Tools — argparse & rich
Objective
Time
Prerequisites
Tools
Lab Instructions
Step 1: argparse — Argument Parsing
docker run --rm zchencow/innozverse-python:latest python3 -c "
import argparse
import sys
# Build a parser programmatically
parser = argparse.ArgumentParser(
prog='storecli',
description='innoZverse Store CLI — Manage your product catalog',
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog='Examples:\n storecli list --category Laptop\n storecli create --name \"Surface Pro\" --price 864'
)
subparsers = parser.add_subparsers(dest='command', required=True)
# List subcommand
list_parser = subparsers.add_parser('list', help='List products')
list_parser.add_argument('--category', '-c', help='Filter by category')
list_parser.add_argument('--sort', choices=['name', 'price', 'stock'], default='name')
list_parser.add_argument('--order', choices=['asc', 'desc'], default='asc')
list_parser.add_argument('--limit', type=int, default=20)
list_parser.add_argument('--format', choices=['table', 'json', 'csv'], default='table')
list_parser.add_argument('--verbose', '-v', action='store_true')
# Create subcommand
create_parser = subparsers.add_parser('create', help='Create a product')
create_parser.add_argument('--name', '-n', required=True)
create_parser.add_argument('--price', '-p', type=float, required=True)
create_parser.add_argument('--stock', '-s', type=int, default=0)
create_parser.add_argument('--category', '-c', default='General')
# Get subcommand
get_parser = subparsers.add_parser('get', help='Get product by ID')
get_parser.add_argument('id', type=int, help='Product ID')
# Delete subcommand
del_parser = subparsers.add_parser('delete', help='Delete a product')
del_parser.add_argument('id', type=int, help='Product ID')
del_parser.add_argument('--force', '-f', action='store_true', help='Skip confirmation')
# Stats subcommand
subparsers.add_parser('stats', help='Show inventory statistics')
# Parse test args (normally sys.argv[1:])
def run(args_str: str):
args = parser.parse_args(args_str.split())
print(f'Command: {args.command}')
print(f'Args: {vars(args)}')
print()
run('list --category Laptop --sort price --order desc')
run('create --name \"Surface Pro\" --price 864.0 --stock 15 --category Laptop')
run('get 1')
run('stats')
"Step 2: rich — Beautiful Terminal Output
Steps 3–8: Logging, Config files, stdin/stdout piping, Interactive prompts, Error formatting, Capstone
Summary
Tool
Purpose
Key classes
Further Reading
Last updated
