key = config.get("Basic","Key")
ns1 = config.get("Domains","NS1")
ns2 = config.get("Domains","NS2")
Короче, захотел я, чтобы доступ к настройкам выглядел примерно так: ns1 = config.Domains['ns1'], когда надо обратился к ней, вне зависимости от того, сколько настроек в файле. Самая хитрость - это сделать свойством класса секцию файла настроек. Именно для этого нужна функция __setattr__. Вот так у меня всё в итоге получилось:
class ConfigDict(object):
def __init__(self,path):
config = ConfigParser.RawConfigParser()
config.read(path)
for section in config.sections():
dct = {}
for option in config.options(section):
dct[option] = config.get(section,option)
self.__setattr__(section,dct)
Используется это вот так:
def main():
conf = ConfigDict("settings.cfg")
threads = conf.Basic['threads']
ns1 = conf.Domains['ns1']
if __name__ == '__main__':
main()
Ну и сам файл настроек settings.cfg:
[Basic]
THREADS = 1 ; потоки
[Domains]
NS1 = ns1.0adz.com
О, Коль, спасибо тебе за этот клёвый сниппет!!
ОтветитьУдалитьОчень и очень кстати. А то замаялся уже настраивать скрипт в скрипте =))
Откройте для себя ConfigObject (http://pypi.python.org/pypi?%3Aaction=search&term=ConfigObject&submit=search)
ОтветитьУдалитьОписалово здесь :http://www.gawel.org/docs/ConfigObject/index.html
А его можно как-нибудь выдрать одним-двумя py-файлами? Просто не очень удобно другим людям объяснять как инсталлить Питон-модули.
ОтветитьУдалитьКак раз мучаюсь с конфигом, а это именно то что нужно! thx!
ОтветитьУдалить