argparse 匹配命令行参数和脚本添加的参数之间最接近的参数

argparse is matching to the closest between the command line arguments and arguments added by the script

我在脚本中的 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 的阅读,我没有发现它提到命令行参数和脚本参数可能是最接近的匹配。直觉上,我认为需要精确匹配。我有以下问题:

来自您链接的官方文档:https://docs.python.org/3/library/argparse.html#argument-abbreviations-prefix-matching

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

来禁用它

来自文档:

class <a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser" rel="nofollow noreferrer">argparse.ArgumentParser</a>(..., allow_abbrev=True, ...)

...

  • allow_abbrev - Allows long options to be abbreviated if the abbreviation is unambiguous. (default: True)

更多信息:Argument abbreviations (prefix matching)