Argparse通过子组进行互斥

  • 本文关键字:Argparse python argparse
  • 更新时间 :
  • 英文 :


当前我的代码的argparse给出以下内容:

usage: ir.py [-h] [-q  | --json | -d ]
Some text
optional arguments:
  -h, --help            show this help message and exit
  -q                    gene query terms (e.g. mcpip1)
  --json                output in JSON format, use only with -q
  -d , --file_to_index  file to index 

我想让它做的是:

  1. -q应与-d互斥
  2. 并且CCD_ 3应该只与CCD_

怎么办?这是我的argparse代码:

parser = argparse.ArgumentParser(description='''Some text''')
group = parser.add_mutually_exclusive_group()
group.add_argument("-q",help="gene query terms (e.g. mcpip1)",metavar="",type=str)
group.add_argument("--json", help="output in JSON format, use only with -q", action="store_true")
group.add_argument("-d","--file_to_index", help="file to index",metavar="",type=str)
args = parser.parse_args()

它目前用--json:拒绝-q

python ir.py --json -q mcpip1
usage: ir.py [-h] [-q  | --json | -d ]
ir.py: error: argument -q: not allowed with argument --json

-q-d并不是真正的选项(可能需要一个(;它们是子命令,因此应该使用argparse的子分析器功能来创建两个子命令queryindex,并仅将--jsonquery子命令关联。

import argparse
parser = argparse.ArgumentParser(description='''Some text''')
subparsers = parser.add_subparsers()
query_p = subparsers.add_parser("query", help="Query with a list of terms")
query_p.add_argument("terms")
query_p.add_argument("--json", help="output in JSON format, use only with -q", action="store_true")
index_p = subparsers.add_parser("index", help="index a file")
index_p.add_argument("indexfile", help="file to index")
args = parser.parse_args()

提供整个程序的帮助

ir.py -h

每个子命令的帮助分别显示

ir.py query -h
ir.py index -h

使用类似

ir.py query "list of terms"
ir.py query --json "list of terms"
ir.py index somefile.ext

最简单的方法是将--json添加到parser,而不是group,并在不需要时忽略它。如果你认为你的帮助行不够,你也可以写一个自定义用法。

也不要害怕在parse_args之后测试是否同时出现或排除了自变量。正如您在侧边栏上看到的,有很多关于mutually_exclusvie_groups的问题。通常,所需的逻辑超出了简单的分组API所能提供的范围。

如果它符合您想要的语法,subparsers会为您提供更多混合和匹配参数的能力。

类似问题的一个较长答案是论点组之间的互斥

理想情况下,您的usage生产线会是什么样子?--json-q是必需的还是仅允许的?

相关内容

  • 没有找到相关文章

最新更新