python argparse 两个子解析器基本相同..几乎
python argparse two subparsers are basically same.. almost
是否可以在不实现所有参数两次的情况下扩展子解析器的新名称?
我有一个程序,我们称它为 pgmm
,它有一个子函数 create
。这个创建函数在某处需要一个配置文件。为了防止寻找这个,创建可以有选项 --noconfig
.
我现在想要的是有一些'pseudo sub parser'可能像init
,和create --noconfig
基本一样
我希望有一种方法可以不用执行相同的两次..
是吗?
我不知道有什么方法可以将此逻辑添加到 argparse
本身,但您不必为了获得所需的行为而这样做。您可以为 create
创建一个子解析器并添加 init
作为该命令的别名,以便可以使用任一命令名称。然后,在调用 parse_args
后使用参数时,检查执行了哪个子命令,如果是 init
,则将 noconfig
标志强制为 True
:
sub_parsers = parser.add_subparsers(dest="action")
...
sub = sub_parsers.add_parser('create', aliases=['init'])
sub.add_argument('--noconfig', action='store_true')
....
args = parser.parse_args(args)
if args.action == 'init':
args.noconfig = True
是否可以在不实现所有参数两次的情况下扩展子解析器的新名称?
我有一个程序,我们称它为 pgmm
,它有一个子函数 create
。这个创建函数在某处需要一个配置文件。为了防止寻找这个,创建可以有选项 --noconfig
.
我现在想要的是有一些'pseudo sub parser'可能像init
,和create --noconfig
我希望有一种方法可以不用执行相同的两次..
是吗?
我不知道有什么方法可以将此逻辑添加到 argparse
本身,但您不必为了获得所需的行为而这样做。您可以为 create
创建一个子解析器并添加 init
作为该命令的别名,以便可以使用任一命令名称。然后,在调用 parse_args
后使用参数时,检查执行了哪个子命令,如果是 init
,则将 noconfig
标志强制为 True
:
sub_parsers = parser.add_subparsers(dest="action")
...
sub = sub_parsers.add_parser('create', aliases=['init'])
sub.add_argument('--noconfig', action='store_true')
....
args = parser.parse_args(args)
if args.action == 'init':
args.noconfig = True