【argparse】main parser和sub-parsers

在 Python 的 argparse 模块中,可以创建一个主解析器/父解析器(main parser)和多个子解析器(sub-parsers)。其中,main parser 中定义作用于整个项目的解析器,sub-parsers 中定义特定于某一些功能的子解析器。其中:

  • main parser 中的选项称作 global option,这些全局选项作用于整个项目
  • sub-parsers 中的选项称作 sub option,子选项的作用范围限制在子解析器内

通过使用一个主解析器和多个子解析器,能够创建更加灵活的命令行接口。

使用示例

下面的示例代码中,定义了一个主解析器 parser 和两个子解析器 parser_aparser_b

import argparse

# Set up the main parser
parser = argparse.ArgumentParser(description='A program with sub-commands')  # 1
parser.add_argument('--verbose', action='store_true', help='increase output verbosity')  # 2

# Set up subparsers for the different sub-commands
subparsers = parser.add_subparsers(title='sub-commands', dest='subcommand', description='valid subcommands', help='additional help')  # 3

# Add subparsers for each sub-command
parser_a = subparsers.add_parser('command_a', help='description of command_a')  # 4
parser_a.add_argument('--option_a', type=int, help='description of option_a')  # 5
parser_b = subparsers.add_parser('command_b', help='description of command_b')  # 6
parser_b.add_argument('--option_b', type=float, help='description of option_b')  # 7
# Add subparsers for additional sub-commands here

# Parse the command-line arguments
args = parser.parse_args()  # 8

if args.verbose:
    print('Verbose mode enabled')

# Check which sub-command was specified and handle its options
if args.subcommand == 'command_a':  # 9
    if args.option_a:
        print(f'command_a was run with option_a={args.option_a}')
    else:
        print('command_a was run')
elif args.subcommand == 'command_b':
    if args.option_b:
        print(f'command_b was run with option_b={args.option_b}')
    else:
        print('command_b was run')
  • 1 处,通过 argparse.ArgumentParser() 定义主解析器 parser
  • 2 处,通过 .add_argument() 方法为主解析器添加一个全局选项:–verbose
  • 3 处,通过 .add_subparsers() 方法创建子解析器 subparsers,作为主解析器 parser 的子解析器,每个 subparser 都通过不同的子命令行指示(参数 dest
  • 46 处,通过 subparsers.add_parser() 创建了两个子解析器 parser_aparser_b
  • 57 处,通过 add_argument() 为子解析器分别添加子选项 –option_a–option_b
  • 8 处,使用 parser.parse_args() 对命令行参数进行解析
  • 9 处,args.subcommand3 处的参数 dest,通过子解析器的名称进行判断

命令行执行程序:

$ python my_tool.py command_a --option_a 42

args.subcommand 指定了当前使用哪个子解析器,上面的例子中,command_a 指定子解析器为 parser_a,同时指定了解析器 parser_a 的选项 –option_a。输出:

command_a was run with option_a=42

在命令行同时使用 –verbose–option_a

$ python my_tool.py --verbose command_a --option_a 42

此时程序开启 verbose 模式,同时执行子解析器 parser_a,输出:

Verbose mode enabled
command_a was run with option_a=42

猜你喜欢

转载自blog.csdn.net/qq_31347869/article/details/129914872