首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从命令行接口(命令行接口,CLI)向OmegaConf的结构化配置提供List/Tuple/Collection?

如何从命令行接口(命令行接口,CLI)向OmegaConf的结构化配置提供List/Tuple/Collection?
EN

Stack Overflow用户
提问于 2022-02-21 22:45:28
回答 1查看 306关注 0票数 0

我使用OmegaConf结构化配置系统是为了获得一种方便的、强类型的方法来配置我的结构化配置应用程序,因为它只需很少的代码,并且允许合并来自源代码、文件系统和CLI的混合,这是通过下面的ConfDef类来定义的。

现在,我想提供一个参数,作为字符串的集合。虽然OmegaConf文档讨论了ConfDef的外观,但没有提供有关CLI交互的详细信息。因此,问题是:

当使用结构化OmegaConf从CLI调用Python时,我们如何提供一个值集合?

我正在使用Ubuntu20.04,但如果存在,则首选通用方法。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-21 22:45:28

在Linux中,我们需要以以下形式提供集合:

代码语言:javascript
复制
python my_scripy.py MY_PATHS="[a,b,c]"

然后,在Python中,我们可以实例化和访问conf,例如:

代码语言:javascript
复制
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/*模式,可以按照以下方式实现:

代码语言:javascript
复制
# 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列出路径中的文件
  • grepls扁平化为换行符分隔列表。
  • tr:用逗号替换换行符

产生上述所需形式的集合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71213904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档