首页 > 解决方案 > 使用 configparser 为多个环境配置

问题描述

这可能是一个很长的问题,但请多多包涵。

我经常创建小型自动化程序,我在开发环境中进行测试,然后推广到生产环境中工作。我使用配置文件来存储我的所有配置,到目前为止它对我来说效果很好,但是让它更难使用的一件事是根据环境切换值。

我过去使用过类似以下结构的东西,但一直想知道是否有更好的方法来维护配置文件。

[Global]
.
.
Environment = Dev

[SpecificSection-Dev]
key1 = dev value1
key2 = dev value2
keyn = dev valuen


[SpecificSection-Prod]
key1 = prod value1
key2 = prod value2
keyn = prod valuen

然后我会读取配置文件并使用环境来决定选择什么,如下所示:

parser.get('SpecificSection-' + parser.get('Global','Environment'), 'key1')

在我以前的代码版本中,我已经注释掉了其他环境的值,并且我手动注释和取消了手头任务所需的值。

我的问题很简单,有没有更好的方法来做到这一点?理想情况下,我想在配置文件中定义一次环境,而不必像我一样在代码中明确处理它。

谢谢, 卡兰

标签: pythonpython-3.xconfiguration

解决方案


我对 Python 不是很熟悉,所以我将使用类似 Java 的伪代码,而不是尝试在这个答案中编写 Python 代码。我建议您编写一个为原始parser对象提供包装器的类。包装类操作的实现get()可以委托给parser对象,就像您在问题中显示的那样。所以,这看起来像(伪代码):

class ParserWrapper {
  Parser   parser;
  String   env;

  ParserWrapper(String file) {
    parser = new Parser(file);
    env = parser.get("Global", "Environment");
  }

  String get(String name) {
    return parser.get("SpecificSection-" + env, name)
  }
}

推荐阅读