Python ConfigParser模块和Openstack olso.cfg模块

介绍

ConfigParser

ConfigParser实现了一种可用来解析ini配置文件配置项的语言。关于ini配置文件的有一些规则,

  1. 需要使用[section]来标识
  2. 配置使用kv形式,两种方式k = v或者k : v
  3. 使用#;来进行注释

结构类似如下:

1
2
3
4
5
[default]
# comments
; comments
name = value
name : value

ConfigParser模块常用方法

读取操作
  1. read(file)
  2. sections()
  3. get(section, option)
  4. getint(section, option)
  5. getboolean(section, option)
  6. has_section(section)
  7. has_option(section, option)
写入操作
  1. add_section(section)
  2. set(section, option, value)
  3. remove_option(section, option)
  4. remove_section(section)
  5. write(file)

oslo.config

oslo是用来为openstak各个组建提供一个common库,其中也就包括了olso.config,用来解析命令行参数和配置文件。

  • 解析自定义的参数,在openstack中,一般都提供默认值
  • 解析一些公共的参数,如--debug--verbose
  • olso.config使用的配置文件是服务启动命令带有的参数--config-file,可指定多个。若未指定,会到默认的几个路径搜索。

使用步骤是:

1
2
3
4
5
6
7
8
9
10
11
12
13
from oslo_config import cfg

backup_manager_opts = [
cfg.StrOpt(‘backup_driver’,
default=‘cinder.backup.drivers.swift’,
help=‘Driver to use for backups.’,
deprecated_name=‘backup_service’),
]

CONF = cfg.CONF
CONF.register_opts(backup_manager_opts)

print CONF.backup_manager_opts

相比ConfigParser,oslo.config强大的多,但在自己的小程序中需要自定义配置时,使用ConfigParser足够了。

use

使用ConfigParser来为一般的daemon程序来写一个简单的cfg模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
“””
config.py
for example:
import config as cfg

CONF = cfg.CONF

CONF.get(‘default’, ‘test’)
“””


import ConfigParser

cfg_file = None

class ConfigOpts(ConfigParser.ConfigParser):
def init(self):
ConfigParser.ConfigParser.init(self)

def call(self, *args, **kwargs):
self.read(args[0])

CONF = ConfigOpts()

在程序的main函数中,获取args调用cfg的call,通过该方法来制定配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
“””
main.py
“””


import sys
import config as cfg

CONF = cfg.CONF

def main():
CONF(sys.argv[1:])

if name == main:
main()

这样,运行程序的时候,如python main.py /etc/test.conf,就能读取到该配置文件的配置项,使用CONG.get(section, option)就可以取的配置项。

参考

https://docs.python.org/2/library/configparser.html
https://wiki.openstack.org/wiki/Oslo/Config