Python ConfigArgParse是否忽略缩写选项?
my config.ini:Python ConfigArgParse是否忽略缩写选项?,python,configuration,argparse,Python,Configuration,Argparse,my config.ini: 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
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
这是一个错误还是我遗漏了一些明显的东西??这是一个非常成熟的模块中非常基本的功能
注意:此功能在中有明确的说明
如果缩写明确(前缀匹配唯一选项),则允许将长选项缩写为前缀
它看起来像是
ConfigArgParse
中的一个bug。当它从配置文件中加载选项时,它将丢弃任何已加载的选项
错误在于只检查完整的参数名,而不检查前缀
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
接受第二个值。@Chris\u Rands-我确实更改了标志--ban new_banana
是--banana new_banana
@Chris_Rands-注意argparse理解这个缩写,因为如果我只是键入一个未知选项python test\u configargparse.py--bazinga new_banana
,我会得到错误:无法识别的参数:--bazinga
好的,谢谢,我不知道这个,但是它看起来像是在Python3.5中添加的allow_abbrev
,您使用的是2。7@Chris_Rands-谢谢,但我对禁用allow_abbrev
不感兴趣,我感兴趣的是保持此功能不出现错误:)听起来像是argparse
功能,ConfigArgParse
不支持。文件里有什么吗?
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)