gpt4 book ai didi

python - argparse 中子解析器之后的可选参数

转载 作者:太空宇宙 更新时间:2023-11-04 03:00:26 25 4
gpt4 key购买 nike

我有代码:

parser = ArgumentParser()
parser.add_argument('--verbose', action='count', default=0, help='debug output')
subparsers = parser.add_subparsers(help='subparser')
parser1 = subparsers.add_parser('action', help='Do something')
parser1.add_argument('--start', action='store_true', help='start')
parser1.add_argument('--stop', action='store_true', help='stop')
parser2 = subparsers.add_parser('control', help='Control something')
parser2.add_argument('--input', action='store_true', help='start')
parser2.add_argument('--output', action='store_true', help='stop')
args = parser.parse_args()

然后我可以运行脚本:

script.py --verbose action --start

script.py --verbose control --output

但不是

script.py action --start --verbose

script.py control --output --verbose

我可以将选项 --verbose 转移到最后,而不将其添加到每个组吗?

最佳答案

详细说明我的评论:

argparse按顺序解析输入列表 (sys.argv[1:]),将字符串与操作(add_argument 对象)匹配。所以如果命令是

 python foo.py --arg1=3 cmd --arg2=4

它尝试处理“--arg1”,然后是“cmd”。如果“cmd”与子解析器名称匹配,则它将解析委托(delegate)给该解析器,将剩余的字符串交给它。如果cmd子解析器可以处理 --arg2 , 它以 unrecognized 的形式返回争论。

主解析器不恢复解析。相反,它只是处理 unrecognized像往常一样参数 - 如果使用 parse_args 会引发错误,并在 extras 中返回它们如果使用 parse_known_args 则列出.

所以如果你想把--verbose最后,您将其定义为子解析器参数。或者在 parse_known_args 之后做一些进一步的解析.

您可以定义 --verbose在两个级别上,尽管有时这样的定义会产生冲突(尤其是在默认值不同的情况下)。

parents机制可用于减少输入量,但您也可以轻松编写自己的实用函数。

关于python - argparse 中子解析器之后的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41055680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com