python - ConfigArgParse 忽略缩写选项?
问题描述
我的 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 的代码
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
允许将长选项缩写为前缀,如果缩写是明确的(前缀匹配唯一选项)
解决方案
它看起来像ConfigArgParse
. 当它从配置文件加载选项时,它会丢弃命令行中已经存在的任何选项。
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
取第二个值。
推荐阅读
- git - git 开关保留被忽略的文件夹
- python - 你如何“连接”这个源代码和我的 tkinter python
- docker - 如何在不手动运行 dbt deps 的情况下配置 DBT 依赖项?
- python - 为什么在这个 for 循环中打印 3?
- python - pygame中的随机系统运动
- vb.net - 在文本框中更改特定数字范围的字体颜色
- arcore - ARCore 不支持的 CAT 产品
- python - 使用 Selenium 单击一个链接,然后返回主页并单击其他链接
- c# - 在帖子中停止 .cshtml 渲染
- cluster-computing - 如何使用 dbutils.library.installPyPI('arcgis', version='1.8.3', extras="all") 安装 arcgis?