在整个python应用程序中全局管理配置

gconf的Python项目详细描述


GCONF

在整个python应用程序中全局管理配置

概述

使用gconf,可以在模块作用域上加载yaml配置文件 这样它的值就可以从运行中的应用程序的任何地方访问。

用法

加载yaml文件

一个或多个yaml配置文件从类路径对象全局加载, 通常在程序的主要功能中。 生成的配置是所有加载配置的覆盖 以后来装载的为准。

加载单个配置文件:

gconf.load('conf.yml')

一次加载多个配置文件:

gconf.load('conf1.yml','conf2.yml')

依次加载多个配置文件:

gconf.load('conf1.yml')gconf.load('conf2.yml')

上面的两个例子产生了相同的结果。 在这两种情况下,config2优先于config1,并重写其值。

每次调用load都返回一个实际加载的所有路径的列表。

从路径列表加载第一个配置:

gconf.load_first('conf1.yml','conf2.yml')

如果存在{{CD4}},则加载它,并且忽略{{CD5>}。 如果不存在^ {CD4}},则加载^ {CD5}}。

load_first返回实际加载的路径。

如果找不到文件,所有加载函数都会引发一个FileNotFoundError。 这可以通过设置关键字参数required=False来防止。

手动添加值

可以从应用程序内部将dict添加到配置中。 这相当于加载具有相同内容的配置文件 如果值已经存在,则重写它们;如果不存在,则添加它们。

gconf.add({'parent':{'child':'new child'}})

警告:使用此功能,gconf模块可以作为全局变量的存储。 全局变量是一种代码味道,不应该使用! 请仅在您确切知道自己在做什么时使用gconf.add()函数。

访问配置值

有几种方法可以寻址存储在配置中的值, 它们都使用模块级get方法。

点符号

gconf.get('parent.child.some value')

字符串参数

gconf.get('parent','child','some value')

两者的混合

gconf.get('parent.child','some value')

顶级项作为字典

gconf.get()['parent']['child']['some value']

一些中间项作为字典

gconf.get('parent')['child']['some value']

要访问列表项,只需在路径中使用它们的索引

gconf.get('list.3')

默认值

get方法接受一个default参数,该参数返回 如果指定的项目不存在:

gconf.get('non-existing',default=default_value)

错误

如果在加载非现有文件和^ {CD15>}(默认值)时尝试,则引发^ {< CD9>}。

如果没有提供^ {< CD14>},尝试访问一个不存在的项会引发一个^ {CD18>}。

临时超控

部分配置可以通过上下文管理器临时重写。 通过一本字典,它覆盖了现存的词典:

withgconf.override_conf({'parent':{'child':'override_value'}}):gconf.get('parent.child')# => 'override_value'gconf.get('parent.child')# => 'original_value'

要临时删除部分配置,可以使用DELETED常量:

withgconf.override_conf({'parent':{'child':gconf.DELETED}}):gconf.get('parent.child')# => KeyErrorgconf.get('parent.child')# => 'original_value'

重置

全局gconf dict可以完全重置。

gconf.reset()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java是否可以创建一个正则表达式来查找与模式不匹配的字符串?   使用“debugUnreturnedConnectionStackTraces”进行java调试连接丢失   java如何在openLDAP中禁用/启用用户帐户?   java无法从jsoup api获取某些类   java无法从APK提取XML文件   如何在linux命令行中替换多个文件中的字符串   java学生班。如何根据单位输入打印成绩?   java有没有办法将Struts配置为绑定null而不是空字符串?   python使用OpenCV[Java]检测简单几何形状   java文件。isFile()和文件。isDirectory()返回false   java Fetch有条件地加入hibernate,还是将实体设计更改为子实体上的条件Fetch?   java lombok@Data generated setter是否对成员对象(如映射)执行深度复制?   java如何使JLabel从下一行开始   java Gradle依赖解决了配置文件的问题