Python Config Parser环境变量

时间:2017-01-27 08:17:52

标签: python environment-variables configparser

我正在尝试将一些环境变量读入我的ConfigParser文件。

我指的是this answer,但我正在

"InterpolationDepthError: Value interpolation too deeply recursive" error.
section: [amazon]
    option : amazon_access_key
    rawval : %(AMAZON_ACCESS_KEY)s

以下是我的配置文件的部分:

[amazon]
amazon_access_key=%(AMAZON_ACCESS_KEY)s
amazon_secret_key=%(AMAZON_SECRET_KEY)s

这就是我要写的文件:

from ConfigParser import SafeConfigParser
import os

config = SafeConfigParser(os.environ)
config.read('config.txt')

当我直接在“亚马逊”部分调用这些变量时,我得到上述错误。

当我在“默认”部分调用这些变量时,例如:

[default]
aws_access_key=%(AMAZON_ACCESS_KEY)s
aws_secret_key=%(AMAZON_SECRET_KEY)s

[amazon]
    amazon_access_key=%(aws_access_key)s
    amazon_secret_key=%(aws_secret_key)s

我收到以下错误:

ConfigParser.InterpolationMissingOptionError: Bad value substitution:
    section: [amazon]
    option : amazon_access_key
    key    : aws_access_key
    rawval : %(aws_access_key)s

我在这里缺少什么?

另外,如何为本地和生产部署提供单独的配置文件?目前,本地和生产环境的所有配置都相同。

2 个答案:

答案 0 :(得分:2)

from ConfigParser import SafeConfigParser
import ConfigParser
import os
class CaseConfigParser(SafeConfigParser):
     def optionxform(self, optionstr):
         return optionstr
config = CaseConfigParser(os.environ)
config.read('config.ini')
print config.get('amazon', 'amazon_access_key')

说明: 这里的问题是使用optionxform,默认情况下将所有选项都变为小写。最终,它将具有关键和值相等,类似于以下。

[amazon]
amazon_access_key=%(amazon_access_key)s

另一个解决方案是 - 在config.txt中更改密钥的名称,不等于env vars。

[amazon]
aak=%(AMAZON_ACCESS_KEY)s

然后

config = SafeConfigParser(os.environ)
config.read('config.ini')
print config.get('amazon', 'aak')

答案 1 :(得分:-2)

您应该记住默认部分应该大写。

[DEFAULT]

进行此更改应解决问题。