14.1.6.5 嵌套解析器
前面介绍的父解析器方法只是在相关命令之间共享选项的一种方法。还可以采用另一种方法,将命令结合到一个程序中,然后使用子解析器处理命令行的各个部分。其做法类似于svn、hg和其他有多个命令行动作或子命令的程序。
如果一个程序要处理文件系统上的目录,则可以通过定义命令来创建、删除和列出目录的内容。
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='commands')
# A list command
list_parser = subparsers.add_parser(
'list',help='List contents')
list_parser.add_argument(
'dirname',action='store',
help='Directory to list')
# A create command
create_parser = subparsers.add_parser(
'create',help='Create a directory')
create_parser.add_argument(
'dirname',action='store',
help='New directory to create')`
create_parser.add_argument(
'--read-only',default=False,action='store_true',
help='Set permissions to prevent writing to the directory',
)
# A delete command
delete_parser = subparsers.add_parser(
'delete',help='Remove a directory')
delete_parser.add_argument(
'dirname',action='store',help='The directory to remove')
delete_parser.add_argument(
'--recursive','-r',default=False,action='store_true',
help='Remove the contents of the directory,too',
)
print(parser.parse_args())
帮助输出将指定子解析器显示为"commands",其可以在命令行上被指定为位置参数。
每个子解析器都有自己的帮助,以描述该命令的参数和选项。
解析参数时,parse_args()返回的Namespace对象只包含与指定命令相关的值。