python - python argparse corss 子命令选项
问题描述
使用argparse,我正在尝试创建一个全局可用的可选参数(在所有命令和子命令中)。
例如,设置一个--verbose
可选参数。--help
与默认情况下可用的方式相同。
以下代码段仅适用于非子命令
parser.add_argument(
'-v', '--verbose',
help='verbose',
type=bool,
default=False,
action=argparse.BooleanOptionalAction
)
怎么做到呢?
解决方案
每个解析器,main 和 sub,都会获得一个自动help
参数(除非您指定add_help=False
)。此外,“-h”在显示其消息后立即退出。因此,如果 '-h' 在子命令字符串之前,您会看到主要帮助。如果在您看到该子命令的帮助之后。
要使诸如“-v”之类的命令在主解析器和子解析器中都可用,您必须在所有解析器中定义它。parents
可以简化这一点。但这有问题,正如@Alex 指出的那样。子命令的default
值会覆盖在主命令(默认或用户)中设置的任何值。
dest
您可以通过为 main 和 subs指定不同的值来解决此问题。您仍然可以使用相同的“-v”,但值将在args
.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-v','--verbose', action='store_true')
sp = parser.add_subparsers(dest='cmd')
sp1 = sp.add_parser('cmd1')
sp1.add_argument('-v', '--verbose', action='store_true', dest='subverbose')
args = parser.parse_args()
print(args)
样本运行:
0925:~/mypy$ python3 stack65773318.py -h
usage: stack65773318.py [-h] [-v] {cmd1} ...
positional arguments:
{cmd1}
optional arguments:
-h, --help show this help message and exit
-v, --verbose
0928:~/mypy$ python3 stack65773318.py cmd1 -h
usage: stack65773318.py cmd1 [-h] [-v]
optional arguments:
-h, --help show this help message and exit
-v, --verbose
0928:~/mypy$ python3 stack65773318.py -v
Namespace(cmd=None, verbose=True)
0928:~/mypy$ python3 stack65773318.py -v cmd1
Namespace(cmd='cmd1', subverbose=False, verbose=True)
0928:~/mypy$ python3 stack65773318.py cmd1 -v
Namespace(cmd='cmd1', subverbose=True, verbose=False)
0928:~/mypy$ python3 stack65773318.py -v cmd1 -v
Namespace(cmd='cmd1', subverbose=True, verbose=True)
推荐阅读
- python - 为什么这个函数返回的值与它打印的不同?
- php - 如何将 PHP 变量写为 HTML 属性值?
- python - 需要了解代码中 [::-1] 的用途是什么?
- svg - 如何获取里面一个角色的风格
- python - 如何在 Tensorflow 中创建自定义图像数据集
- python - 通过 pandas 操作访问特定组中的组
- java - 如何将 Or 标准与限制列表一起使用
- python - 如何将不规则的时间序列重新采样为每日频率并跨越到今天?
- api - 如何在获取成功响应中呈现 react-native 组件?
- python - datetime 与 date 的时间差为 0 秒