簡體   English   中英

如何在水泥Python應用程序中加載JSON配置文件?

[英]How to load JSON config file in cement python app?

我剛剛開始使用水泥作為python框架。 該應用的默認配置似乎不是JSON。

看來Cement具有JsonConfigHandler()類,可以將JSON配置加載到應用程序中。 我在我的應用中使用了以下代碼:

ins = JsonConfigHandler()
ins.parse_file('/etc/luna/luna.conf')

但是它給出了以下錯誤:

    return self._parse_file(file_path)
  File "/Library/Python/2.7/site-packages/cement/ext/ext_json.py", line 243, in _parse_file
    self.merge(self._json.load(open(file_path)))
AttributeError: 'NoneType' object has no attribute 'load'

我應該如何在水泥應用程序中加載JSON配置文件?

默認情況下,我使用app.config.parse_file('/etc/my_app/app.conf')加載配置沒有問題,並且配置文件包含:

[connection]
host=172.16.131.12

JSON文件/etc/luna/luna.conf

{
    "connection": {
        "host": "172.16.131.12"
    }
}

蟒蛇:

from cement.core.foundation import CementApp
from cement.ext.ext_json import JsonConfigHandler

app = CementApp('test', config_handler=JsonConfigHandler,
                config_files=['/etc/luna/luna.conf'])
app.setup()

print(app.config.get('connection', 'host'))

輸出172.16.131.12


舊答案,請忽略

不知道該庫,但是查看代碼看起來就像您必須先調用_setup()方法:

ins = JsonConfigHandler()
ins._setup(app)
ins.parse_file('/etc/luna/luna.conf')

抱歉,您不能在此之上,但這是官方回復(主要開發人員):

您只需要包括json擴展名,然后將CementApp.Meta.config_handler設置為json

from cement.core.foundation import CementApp

class MyApp(CementApp):
    class Meta:
        label = 'myapp'
        extensions = ['json']
        config_handler = 'json'
        config_extension = '.json'

這將保留默認的config_files列表不變,但對要查找的文件使用.json而不是.conf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM