【问题标题】:How to use top-level arguments with subparsers in argparse如何在 argparse 中将顶级参数与子解析器一起使用
【发布时间】:2015-07-08 19:15:39
【问题描述】:

在 Python 的 argparse 中,如何在仍然使用作为子解析器实现的命令的同时实现顶级参数?

我正在尝试实现 --version 参数来显示程序的版本号,但 argparse 给了我 error: too few arguments 因为我没有为其中一个子解析器指定子命令。

我的代码:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
    '-v', '--version',
    help='Show version.',
    action='store_true',
    default=False
)
subparsers = parser.add_subparsers(
    dest="command",
)
list_parser = subparsers.add_parser('list')
parser.parse_args(['--version'])

输出:

usage: myscript.py [-h] [-v] {list} ...
myscript.py: error: too few arguments

【问题讨论】:

    标签: python argparse


    【解决方案1】:

    如果你只需要版本工作,你可以这样做:

    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '-v', '--version',
        action='version',
        version='%(prog)s 1.0',
    )
    

    子解析器不会再打扰了;特殊的version 操作在解析器查找子命令之前被处理并退出脚本。

    【讨论】:

      【解决方案2】:

      子解析器是一种positional argument。所以通常这是必需的(就像您指定了add_argument('foo'))。

      skyline's 建议有效,因为action='version' 是一个在显示其信息后退出的操作类,就像默认的-h 一样。

      最新的argparse 中存在使子解析器可选的错误/功能。根据解决方法,将来可能会为add_subparsers 命令提供required=False 参数。但预期的设计是需要子解析器,除非标记的参数(如“-h”)使解析短路。

      【讨论】:

        猜你喜欢
        • 2018-04-08
        • 2016-08-18
        • 2020-12-04
        • 2020-09-26
        • 2015-07-17
        • 1970-01-01
        • 2012-04-25
        • 2022-12-13
        • 2015-11-08
        相关资源
        最近更新 更多