Как прочитать файл конфигурации из модуля и из основного файла?

У меня проблема с загрузкой и чтением файла конфигурации. Когда я запускаю файл imptest.py, Python читает configfile.cfg, и я получаю следующий вывод:

D:\tmp\test\dir1>python imptest.py
Section1
Section2
Section3

Но когда я запускаю файл mainfile.py, ничего не происходит, и кажется, что Python не читает файл configfile.cfg:

D:\tmp\test>python mainfile.py

D:\tmp\test>

Моя структура каталогов:

test/
 dir1/
    __init__.py
    imptest.py
 static/
    configfile.cfg
 mainfile.py

Источник файла mainfile.py:

from dir1.imptest import run

if __name__ == '__main__':
    run() 

Источник файла imptest.py:

import configparser

def run():
    config = configparser.ConfigParser()
    config.read('../static/configfile.cfg', encoding='utf8')

    for sections in config.sections():
        print (sections)

if __name__ == '__main__':
    run()

Источник файла configfile.cfg:

[Section1]
Foo = bar
Port = 8081

[Section2]
Bar = foo
Port = 8080

[Section3]
Test = 123
Port = 80 

Отредактировано

Пока мое решение (абсолютные пути):

cwd = os.path.realpath(os.path.dirname(__file__) + os.path.sep + '..')
config.read(os.path.join(cwd,'static' + os.path.sep + 'configfile.cfg'), encoding='utf8')

Это лучше, хуже или такое же, как решение @Yavar?


person Szymon    schedule 11.10.2012    source источник


Ответы (2)



он не находит ваш файл конфигурации, потому что вы используете неправильный путь при вызове из вашей версии основного файла.

что интересно, configparser молча игнорирует. Проверь это:

Python 3.2.3 (default, Sep 10 2012, 18:14:40) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import configparser
>>> 
>>> config = configparser.ConfigParser()
>>> config.read('doesnotexist.cfg')
[]
>>> print(config.sections())
[]
>>> 
person Corey Goldberg    schedule 11.10.2012