我使用OmegaConf的结构化配置系统是为了获得一种方便的、强类型的方法来配置我的结构化配置应用程序,因为它只需很少的代码,并且允许合并来自源代码、文件系统和CLI的混合,这是通过下面的ConfDef类来定义的。
现在,我想提供一个参数,作为字符串的集合。虽然OmegaConf文档讨论了ConfDef的外观,但没有提供有关CLI交互的详细信息。因此,问题是:
当使用结构化OmegaConf从CLI调用Python时,我们如何提供一个值集合?
我正在使用Ubuntu20.04,但如果存在,则首选通用方法。
from dataclasses import dataclass
from typing import List
from omegaconf import OmegaConf, MISSING
@dataclass
class ConfDef:
"""
:cvar MY_PATHS: Collection of paths to be processed
"""
MY_PATHS: List[str] = MISSING发布于 2022-02-21 22:45:28
在Linux中,我们需要以以下形式提供集合:
python my_scripy.py MY_PATHS="[a,b,c]"然后,在Python中,我们可以实例化和访问conf,例如:
conf = OmegaConf.structured(ConfDef())
cli_conf = OmegaConf.from_cli()
conf = OmegaConf.merge(conf, cli_conf)
print("\n\nCONFIGURATION:")
print(OmegaConf.to_yaml(conf), end="\n\n\n")
print(conf.MY_PATHS) # This prints the list of strings ["a", "b", "c"]此外,如果您想要扩展具有多个路径(例如glob )的./data/files/*模式,可以按照以下方式实现:
# just basenames
python my_script.py MY_PATHS="[`ls -p data/files/ | grep -v / | tr '\n' ','`]"
# absolute paths (nonrecursive)
python my_script.py MY_PATHS="[`EXCEL_PATHS="[`ls -d $PWD/data/files/* | tr '\n' ','`]"`]"解释(来自这里):
ls列出路径中的文件grep将ls扁平化为换行符分隔列表。tr:用逗号替换换行符产生上述所需形式的集合。
https://stackoverflow.com/questions/71213904
复制相似问题