【问题标题】:argparse is matching to the closest between the command line arguments and arguments added by the scriptargparse 与命令行参数和脚本添加的参数之间最接近的匹配
【发布时间】:2022-01-02 11:15:23
【问题描述】:

我在脚本中的 argparse 解析器中添加了一些参数,如下所示:

parser = argparse.ArgumentParser()
parser.add_argument("--eval_model_dir", type=str, default='',
                    help="Model directory for evaluation.")
parser.add_argument("--evaluate_during_training", action='store_true',
                    help="Run evaluation during training at each save_steps.")

我正在从命令行运行脚本,如下所示:

python test.py --eval_ dummy_value

即使从命令行传递的参数--eval_ 与脚本中的参数--eval_model_dir 不匹配,传递的值dummy_value 也会分配给--eval_model_dir。如果命令行参数是--eval,我会收到如下错误消息: error: ambiguous option: --eval could match --evaluate_during_training, --eval_model_dir.

根据我对Argparse official documentation 的阅读,我没有发现它提到命令行参数和脚本参数可能是最接近的匹配。直觉上,我认为需要完全匹配。我有以下问题:

  • 这是否与 argparse 的最接近参数特征匹配?如果是这样,如果有人可以请我指向官方文档。
  • 这种匹配的规则是什么?根据我所做的运行,从左到右读取命令行参数时,参数匹配只能适合脚本中的一个参数。不确定这是否正确或此匹配中有任何极端情况。
  • 有没有办法阻止他最接近的匹配?

【问题讨论】:

  • 旁注:type=str 不需要,因为这是默认设置
  • Ctrl-F "ambiguous" 在文档中,你的答案就是;)
  • 默认是允许缩写,简单匹配。它不是试图做一个“最佳匹配”。在这种情况下,两个动作都匹配,所以它会抱怨。禁止缩写的功能是一个相对较新的功能(在 v 3.5 中,在 3.8 中进一步修正)。

标签: python argparse


【解决方案1】:
【解决方案2】:

来自文档:

class @987654321@(..., allow_abbrev=True, ...)

...

  • allow_abbrev - 如果缩写明确,则允许缩写长选项。 (默认:True)

更多信息:Argument abbreviations (prefix matching)

【讨论】:

    【解决方案3】:

    请参考Argument abbreviations (prefix matching) 您可以通过将“allow_abbrev”设置为 False 来禁用它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多