如何在ConfigParser中拆分常用定义?

时间:2013-07-12 16:33:47

标签: python configparser

我是DRY的忠实拥护者,并希望将我的CFG文件拆分为公共部分和特定环境部分,并让env部分从公共部分“继承”,如下所示:

[generic]
basedir = ~/computational-services/jobs
pattern = Job*
usage-jar = ../lib/usage-logging-client.jar

[dev-test]
age = 7
dirs = [
     ('%(basedir)s/rundir01', %(age)s, '%(pattern)s', 'cleanupRunDir01'),
     ('%(basedir)s/linuxNonimmediate', %(age)s, '%(pattern)s', 'cleanupLinuxNonimmediate01'),
     ]

[prod]
age = 14
dirs = [
     ('%(basedir)s/rundir01', %(age)s, '%(pattern)s', 'cleanupRunDir01'),
     ]

现在,我收到以下错误:

ConfigParser.InterpolationMissingOptionError: Bad value substitution:
    section: [dev-test]
    option : dirs
    key    : basedir
    rawval : [
('%(basedir)s/rundir01', %(age)s, '%(pattern)s', 'cleanupRunDir01'),
('%(basedir)s/linuxNonimmediate', %(age)s, '%(pattern)s', 'cleanupLinuxNonimmediate01'),
]

如果我重复自己,并将basedirpattern添加到[dev-test]一切都很好:

[dev-test]
age = 7
basedir = ~/computational-services/jobs
pattern = Job*
dirs = [
     ('%(basedir)s/rundir01', %(age)s, '%(pattern)s', 'cleanupRunDir01'),
     ('%(basedir)s/linuxNonimmediate', %(age)s, '%(pattern)s', 'cleanupLinuxNonimmediate01'),
     ]

有没有办法在另一个部分中使用某个部分的键/值(甚至尝试generic.basedirgeneric:basedir)?

谢谢。

1 个答案:

答案 0 :(得分:2)

对不起,请再次查看文档并阅读DEFAULT

[DEFAULT]
basedir = ~/computational-services/jobs
pattern = Job*
usage-jar = ../lib/usage-logging-client.jar

[dev-test]
age = 7
dirs = [
     ('%(basedir)s/rundir01', %(age)s, '%(pattern)s', 'cleanupRunDir01'),
     ('%(basedir)s/linuxNonimmediate', %(age)s, '%(pattern)s', 'cleanupLinuxNonimmediate01'),
     ]

应该花费尽可能多的时间来搜索文档,以检查SO。 :)