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