Python 配置解析器环境变量
Python Config Parser environment variables
我正在尝试将一些环境变量读入我的 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')
当我在 "amazon" 部分直接调用这些变量时,出现上述错误。
当我在 "default" 部分调用这些变量时,如:
[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
我在这里错过了什么?
此外,如何为本地部署和生产部署设置单独的配置文件?目前,本地和生产环境的所有配置都是相同的。
你应该记住,默认部分应该大写。
[DEFAULT]
进行此更改应该可以解决问题。
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 中的键名更改为不等于环境变量。
[amazon]
aak=%(AMAZON_ACCESS_KEY)s
然后
config = SafeConfigParser(os.environ)
config.read('config.ini')
print config.get('amazon', 'aak')
我正在尝试将一些环境变量读入我的 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')
当我在 "amazon" 部分直接调用这些变量时,出现上述错误。
当我在 "default" 部分调用这些变量时,如:
[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
我在这里错过了什么?
此外,如何为本地部署和生产部署设置单独的配置文件?目前,本地和生产环境的所有配置都是相同的。
你应该记住,默认部分应该大写。
[DEFAULT]
进行此更改应该可以解决问题。
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 中的键名更改为不等于环境变量。
[amazon]
aak=%(AMAZON_ACCESS_KEY)s
然后
config = SafeConfigParser(os.environ)
config.read('config.ini')
print config.get('amazon', 'aak')