目前,我的代码的 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

我想要它做的是以下内容:
  • -q 应该与 -d
  • 互斥
  • --json 只能与 -q
  • 一起使用

    有什么办法呢?
    这是我的 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()
    

    它目前使用 -q 拒绝 --json :
    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 ,并将 --json 仅与 query 子命令相关联。

    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
    

    关于python - Argparse 通过子分组互斥,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24009020/

    10-16 13:00