在argparse中,子命令解析器中的全局参数的位置并不重要。argparse会自动将全局参数与子命令参数分开处理。以下是一个包含代码示例的解决方法:
import argparse
# 创建全局参数解析器
global_parser = argparse.ArgumentParser(prog='my_program')
global_parser.add_argument('--global_param', type=int, help='A global parameter')
# 创建子命令解析器
subparsers = global_parser.add_subparsers(title='subcommands', dest='subcommand')
# 创建子命令1解析器
subparser1 = subparsers.add_parser('subcommand1', help='subcommand1 help')
subparser1.add_argument('subcommand1_param', type=str, help='subcommand1 parameter')
# 创建子命令2解析器
subparser2 = subparsers.add_parser('subcommand2', help='subcommand2 help')
subparser2.add_argument('subcommand2_param', type=float, help='subcommand2 parameter')
# 解析命令行参数
args = global_parser.parse_args()
# 打印解析结果
print('Global parameter:', args.global_param)
print('Subcommand:', args.subcommand)
if args.subcommand == 'subcommand1':
print('Subcommand1 parameter:', args.subcommand1_param)
elif args.subcommand == 'subcommand2':
print('Subcommand2 parameter:', args.subcommand2_param)
在上述代码中,使用argparse.ArgumentParser
创建全局参数解析器global_parser
。然后,使用global_parser.add_subparsers
创建子命令解析器subparsers
。接下来,使用subparsers.add_parser
创建每个子命令的解析器subparser1
和subparser2
。分别为每个子命令解析器添加自己的参数。最后,使用global_parser.parse_args()
解析命令行参数,并根据解析结果进行相应的操作。
注意:子命令解析器中的全局参数位置不重要,argparse会自动将全局参数与子命令参数分开处理。无论全局参数出现在命令行参数的任何位置,都会被正确解析。