gpt4 book ai didi

Python argparse 带有选项和 nargs=2

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

我正在尝试创建一个带有两个参数的选项。第一个参数应通过选择进行验证,但第二个参数是任意用户提供的值。例如。

> app -h
usage: app [--option {count,label} arg]

正确使用示例:

> app --option count 1
> app --option count 912
> app --option label userfoo

我尝试这样设置:

parser.add_argument('--option', choices=['count','label'], nargs=2)

这不起作用,因为它尝试使用选择来验证两个参数。帮助字符串显示如下:

usage: app [--option {count,label} {count,label}]

我可以通过多种方式手动完成此操作:

  • 删除选择字段并手动验证代码中的第一个参数。
  • 将其分隔为 --option count --value 3,但这很尴尬,因为 --value 是选项所必需的,但如果没有它则无效。它实际上是一个具有两个值的选项
  • 使 --option 具有复合值,例如 --option count=3 然后解析该值

我想要的一部分是让自动生成的帮助字符串显示第一个参数的选择。我还希望 argparse 尽可能使用最少的自定义代码来检测和报告错误。原因是我们有一个非常复杂的 CLI,这有助于保持一致性。

有没有办法用argparse来做到这一点?

最佳答案

parser._get_values 执行此操作,当 nargs 为数字时:

        value = [self._get_value(action, v) for v in arg_strings]
for v in value:
self._check_value(action, v)

_get_value 应用type 函数,而_check_value 测试选择。此后,values 列表将传递给 store 操作。

因此,正常处理会对每个字符串应用相同的类型选择测试。

我可以想象编写一个 type 函数来接受列表中的数字和字符串。但它无法区分第一个和第二个参数。自定义Action将看到两者,并且可以进行进一步的测试。

但通常在解析后进行自己的值测试会更简单。 解析器不必做所有事情。它的主要功能是弄清楚用户想要什么。检查值并提出标准化错误是解析的一部分,但这不是其主要目的。

还要考虑如何指定预期输入的用法/帮助。

关于Python argparse 带有选项和 nargs=2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48348705/

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