Python - 配置选项,如何输入/处理?

时间:2009-06-19 20:16:16

标签: python options optional-parameters

当您的应用程序需要一些(~5)配置参数时,应用程序就会运行 由非技术用户使用(即KISS),你通常如何处理阅读 配置选项,然后传递对象/函数之间的参数 (多个模块)?

选项示例:输入和输出目录/文件名,详细级别。

我通常使用optparse(Python)并传递选项/参数 参数;但我想知道使用配置文本是否更常见 所有模块的对象直接读取的文件(但不是这样的 比如拥有'全球'变量?,没有人'拥有'国家?)。

另一个典型问题是单元测试;如果我想对每个单元进行单元测试 单个模块独立,特定模块可能只需要 5个配置选项中的1个;你通常如何解耦个人 来自应用程序其余部分的模块/对象,但仍允许它 接受1或2个必需参数(单元测试框架以某种方式 调用或接管配置功能)?

我的猜测是没有一种独特的正确方法可以做到这一点,但它确实如此 有趣的是阅读各种方法或众所周知的模式。

2 个答案:

答案 0 :(得分:2)

您是否经常通过以下方式阅读配置选项: - 命令行/ gui选项 - 配置文本文件

两者。我们使用Django的settings.py和logging.ini。我们还对最常更改的选项使用命令行选项和参数。

多个模块/对象如何访问这些选项?

  • settings.py; logging.ini - 不能说。
  • 我们的选项是主程序的私有选项,用于构建 函数或对象初始值设定项的参数。

[分享optparse选项是一个巨大的痛苦,不必要的东西将很多东西绑定到一个不可测试的混乱中。]

在对单个模块进行单元测试时(不是“主”模块): (例如,指定输入文件名的读取选项)

[我无法解析这个问题。我认为这是“当有选项时你如何测试?”]

答案是 - 我们没有。由于只有main方法解析命令行选项,因此没有其他模块,函数或类对命令行选项有任何想法。没有这个模块“需要5个配置选项中的1个”模块的类(或函数)具有普通参数,就是这样。

我们只使用optparse

答案 1 :(得分:0)

"Counts answer"
Please update these counts and feel free to add/modify.

Do you usually read config options via:
- command-line/gui options : 1
- a config text file       : 0


How do multiple modules/objects have access to these options?
- they receive them from the caller as an argument: 1
- read them directly from the config text file:     0


When doing unit-testing of a single module (NOT the "main" module)
and the module uses one option, e.g. input filename:
- unit-test framework provides own "simplified" config functionality: 0
- unit-test framework invokes main app's config functionality:        1


Do you use:
- optparse:  1
- getopt:    0
- others?


Please list any config management "design pattern" 
(usable in Python) and add a count if you use it - thanks.
- 
-