argparser条件字段取决于选项

2024-09-20 04:04:12 发布

您现在位置:Python中文网/ 问答频道 /正文

目前我正在构建一个CLI工具,我想给它一个类似的表单。你知道吗

usage: PROG SUBPARSER [-h] 
                 (-l {optionA,optionB,optionC} | -s TERM [-a, [-b, [-c]]])

我正在做的是我有一个主cli模块,它将从我想要向用户公开的所有模块中导入所有参数解析器函数,并将它们动态地添加到主解析器中作为sub parsers

下面的python代码是将解析器添加到主解析器的函数的一部分,它是来自类型ArgumentParser的对象,可以是根解析器,也可以是子解析器。(我对每个模块都这样做,因此它们的方法以CLI的形式公开)。你知道吗

在这个特殊的例子中,我要做的是有一个命令,比如说PROG,第一个参数SUBPARSER,它有两个(可能更多)互斥的参数序列(没有创建新的子解析器),比如说我有两个函数,searchlist search和list可以有公共参数(将分配给子解析器,而不是组),但是也有专门用于--list--search的标志和参数,以便生成如下命令

PROG SUBARSER --list optionA -a -o -b
PROG SUBARSER --list optionA -a -o
PROG SUBARSER --list optionA -a -b
PROG SUBARSER --list optionA -a
PROG SUBARSER --list optionA

PROG SUBARSER --search TERM -a -k
PROG SUBARSER --search TERM -c
PROG SUBARSER --search TERM 

我尝试向解析器中添加嵌套组,其中包含互斥组和常规组,但这不允许(或者至少我还没有找到方法)包含多个参数的互斥组,而不仅仅是一个标志或属性。你知道吗

这是我到目前为止,没有崩溃,实际上运行有用。你知道吗

usage: PROG SUBPARSER [-h]
            [-l {all,draft,staged,publish,build,not-build} | -s SEARCH]

def argument_parser(parser):
    """Argument parser for SUBPARSER subgroup"""
    group = parser.add_mutually_exclusive_group(required=False)
    group.add_argument('-l','--list', 
                       choices=status_criterias,
                       help='List the content specified',
                       default='all'
                       )
    group.add_argument('-s','--search', 
                       help='Search by title from all the content')

请不要介意帮助字符串。你知道吗

有什么帮助吗?你知道吗


Tags: 模块函数parser解析器search参数groupall