gpt4 book ai didi

python - 在子命令后允许 argparse 全局标志

转载 作者:太空狗 更新时间:2023-10-29 17:46:42 25 4
gpt4 key购买 nike

我正在使用 argparse 构建带有子命令的命令:

mycommand [GLOBAL FLAGS] 子命令 [FLAGS]

我希望全局标志在子命令之前或之后都有效。有没有不涉及重复代码的简洁方法?

例如:

  parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subparser_name')

parser.add_argument('--disable') # This flag...

sp = subparsers.add_parser('compile')
sp.add_argument('zones', nargs='*')
sp.add_argument('--disable') # Is repeated...

sp = subparsers.add_parser('launch')
sp.add_argument('zones', nargs='*')
sp.add_argument('--disable') # over and over...

我想为很多标志做这个,所以一遍又一遍地重复我自己似乎... unpythonic。

最佳答案

这是 parents 的完美用例argparse 特征:

Sometimes, several parsers share a common set of arguments. Rather than repeating the definitions of these arguments, a single parser with all the shared arguments and passed to parents= argument to ArgumentParser can be used.

定义一个基础父级 ArgumentParser,添加将在子解析器之间共享的参数。然后,添加子解析器并通过提供 parents 关键字参数将您的基本解析器设置为父解析器:

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subparser_name')

base_subparser = argparse.ArgumentParser(add_help=False)
# define common shared arguments
base_subparser.add_argument('--disable')

sp = subparsers.add_parser('compile', parents=[base_subparser])
# define custom arguments
sp = subparsers.add_parser('launch', parents=[base_subparser])
# define custom arguments

请注意,此处的 add_help=False 有助于避免 conflicting help argument 出现问题.

另见:Python argparse - Add argument to multiple subparsers .

关于python - 在子命令后允许 argparse 全局标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23296695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com