我正在用 Python 编写一个守护程序脚本,并希望能够在程序期望读取的文件(如 .conf 文件)中指定设置。标准库有 configparser 和 xdrlib 文件格式,但看起来都不是 Python 的;前者是 Microsoft 标准,后者是 Sun Microsystems 标准。
我可以自己编写,但我宁愿坚持一个众所周知且有记录的标准,也不愿重新发明轮子。
我正在用 Python 编写一个守护程序脚本,并希望能够在程序期望读取的文件(如 .conf 文件)中指定设置。标准库有 configparser 和 xdrlib 文件格式,但看起来都不是 Python 的;前者是 Microsoft 标准,后者是 Sun Microsystems 标准。
我可以自己编写,但我宁愿坚持一个众所周知且有记录的标准,也不愿重新发明轮子。
除非您有任何特别复杂的需求,否则使用 configparser 没有任何问题。这是一种简单的平面文件格式,很多人都容易理解和熟悉。如果这真的让您感到不快,那么总是可以选择使用 JSON 或 YAML 配置,但这些是更重量级的格式。
第三种流行的选择是只使用 Python 作为您的配置文件。这为您提供了更大的灵活性,但也增加了通过“仅”修改配置文件来引入奇怪错误的几率。
恕我直言:永远不要触摸 ConfigParser 模块,它已经过时(阅读:显然没有更新)并且有很多怪癖。用于评论的 API?忘了它!访问默认部分?哈哈!想知道未解析的配置字段吗?好吧,猜猜看:ConfigParser 迭代所有配置文件并静默失败(涂上光泽),可能最终对所有错误进行浓缩的异常跟踪。找出哪个错误属于哪个文件并不容易。没有嵌套的配置部分...
而是 CSV,然后是 ConfigParser!
IMO:将 Json 用于配置文件。python 数据结构和 Json-String 表示之间的非常灵活、直接的映射是可能的,并且仍然是人类可读的。顺便提一句。不同语言之间的交流非常容易。
文件中的花括号不是那么漂亮,但你不能拥有它!;-)
我也是从 configparser 和 optionsparser 开始的,但对我来说,最流畅的方法就是在 .py 文件中定义字典并将其作为模块导入。然后,您可以直接访问配置而无需任何进一步处理。
#
# example.py
#
config = {
"dialect" : "sqlite",
"driver" : "",
"database" : "testdb",
"host" : "localhost",
"port" : "0"
}
只要您需要访问,只需执行以下操作:
from example import config
print config["database"]