代码之家  ›  专栏  ›  技术社区  ›  ihadanny

ConfigArgParse是否忽略缩写选项?

  •  0
  • ihadanny  · 技术社区  · 6 年前

    banana=original_banana
    

    如果使用参数全名运行,则会得到预期的结果:

    python test_configargparse.py --banana new_banana
    new_banana
    

    --ban 而不是 --banana ),我会有意想不到的行为:

    python test_configargparse.py --ban new_banana 
    original_banana
    

    test_configargparse.py的代码

    import os, configargparse as ap
    parser = ap.ArgumentParser(default_config_files=["config.ini"])
    parser.add_argument('--banana',dest='banana')
    options = parser.parse_args()
    print(options.banana)
    

    版本= ConfigArgParse==0.13.0 Python 2.7.10

    这是虫子还是我漏掉了一些明显的东西??这是一个非常成熟的模块的一个非常基本的特性。。。

    注意:这个特性在 https://docs.python.org/3/library/argparse.html

    如果缩写不含糊(前缀与唯一选项匹配),则允许将长选项缩写为前缀

    0 回复  |  直到 6 年前
        1
  •  1
  •   Don Kirkby    5 年前

    它看起来像个虫子 ConfigArgParse already on the command line .

    discard_this_key = already_on_command_line(
        args, action.option_strings)
    

    问题是 already_on_command_line() 只检查完整的参数名,不检查前缀。

    def already_on_command_line(existing_args_list, potential_command_line_args):
        """Utility method for checking if any of the potential_command_line_args is
        already present in existing_args.
        """
        return any(potential_arg in existing_args_list
                   for potential_arg in potential_command_line_args)
    

    ArgumentParser 取第二个值。