6

我正在用 Python 编写一个守护程序脚本,并希望能够在程序期望读取的文件(如 .conf 文件)中指定设置。标准库有 configparser 和 xdrlib 文件格式,但看起来都不是 Python 的;前者是 Microsoft 标准,后者是 Sun Microsystems 标准。

我可以自己编写,但我宁愿坚持一个众所周知且有记录的标准,也不愿重新发明轮子。

4

3 回答 3

5

除非您有任何特别复杂的需求,否则使用 configparser 没有任何问题。这是一种简单的平面文件格式,很多人都容易理解和熟悉。如果这真的让您感到不快,那么总是可以选择使用 JSON 或 YAML 配置,但这些是更重量级的格式。

第三种流行的选择是只使用 Python 作为您的配置文件。这为您提供了更大的灵活性,但也增加了通过“仅”修改配置文件来引入奇怪错误的几率。

于 2013-03-18T20:17:58.990 回答
2

恕我直言:永远不要触摸 ConfigParser 模块,它已经过时(阅读:显然没有更新)并且有很多怪癖。用于评论的 API?忘了它!访问默认部分?哈哈!想知道未解析的配置字段吗?好吧,猜猜看:ConfigParser 迭代所有配置文件并静默失败(涂上光泽),可能最终对所有错误进行浓缩的异常跟踪。找出哪个错误属于哪个文件并不容易。没有嵌套的配置部分...

而是 CSV,然后是 ConfigParser!

IMO:将 Json 用于配置文件。python 数据结构和 Json-String 表示之间的非常灵活、直接的映射是可能的,并且仍然是人类可读的。顺便提一句。不同语言之间的交流非常容易。

文件中的花括号不是那么漂亮,但你不能拥有它!;-)

于 2013-03-18T20:20:46.597 回答
1

我也是从 configparser 和 optionsparser 开始的,但对我来说,最流畅的方法就是在 .py 文件中定义字典并将其作为模块导入。然后,您可以直接访问配置而无需任何进一步处理。

#
# example.py
#
config = {
    "dialect"   :   "sqlite",
    "driver"    :   "",
    "database"  :   "testdb",
    "host"      :   "localhost",
    "port"      :   "0"
}

只要您需要访问,只需执行以下操作:

from example import config

print config["database"]
于 2013-03-18T23:14:39.680 回答