← 中文资源

简体中文版本

用 argparse 构建子命令

用 subparsers 组织 Python CLI,使每个命令拥有独立参数与共享顶层解析器。

阅读英文原文

目标

单一扁平的 CLI 在功能增长后积累大量互相冲突的开关,帮助信息也难以阅读。本配方用 add_subparsers 为每个命令建立独立解析器,各自定义参数,再由顶层的 command 字段分派到对应处理函数,从而让每个命令拥有隔离的参数集与帮助;提醒全局选项应定义在顶层解析器上。

步骤要点

  1. 用 add_subparsers 为每个命令建立子解析器。
  2. 为各子命令定义独立参数。
  3. 按 command 字段分派到对应处理函数。
  4. 在顶层解析器上定义全局共享选项。
import argparse
p = argparse.ArgumentParser(prog='tool')
sub = p.add_subparsers(dest='command', required=True)
sync = sub.add_parser('sync', help='sync data')
sync.add_argument('--since')
listp = sub.add_parser('list', help='list items')
listp.add_argument('--limit', type=int, default=20)
args = p.parse_args()

排错提示

  • 处处需要的全局选项应放顶层。
  • 未设置 required 时缺少命令不会报错。
  • 嵌套子命令会变得冗长。

适用边界

  • argparse 帮助格式有限。
  • 不包含 shell 补全。