如何在 argparse 中使用带有子解析器的顶级参数
How to use top-level arguments with subparsers in argparse
在 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
如果你只需要版本工作,你可以这样做:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
'-v', '--version',
action='version',
version='%(prog)s 1.0',
)
子解析器不会再麻烦了;在解析器查找子命令之前,特殊的 version
操作被处理并退出脚本。
子解析器是一种positional argument
。所以通常这是必需的(就像您指定了 add_argument('foo')
)一样。
skyline's
建议有效,因为 action='version'
是一个在显示其信息后退出的操作 class,就像默认的 -h
.
最新的 argparse
中有 bug/feature 使子解析器可选。根据解决的方式,将来可能会给 add_subparsers
命令一个 required=False
参数。但预期的设计是需要子解析器,除非标记的参数(如“-h”)使解析短路。
在 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
如果你只需要版本工作,你可以这样做:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
'-v', '--version',
action='version',
version='%(prog)s 1.0',
)
子解析器不会再麻烦了;在解析器查找子命令之前,特殊的 version
操作被处理并退出脚本。
子解析器是一种positional argument
。所以通常这是必需的(就像您指定了 add_argument('foo')
)一样。
skyline's
建议有效,因为 action='version'
是一个在显示其信息后退出的操作 class,就像默认的 -h
.
最新的 argparse
中有 bug/feature 使子解析器可选。根据解决的方式,将来可能会给 add_subparsers
命令一个 required=False
参数。但预期的设计是需要子解析器,除非标记的参数(如“-h”)使解析短路。