2009-06-19 64 views
3

当您的应用程序需要几个(〜5)配置参数,并且应用程序将要使用非技术用户(即KISS) 时,您通常如何处理读取 配置选项,然后传递参数对象/函数之间 (多个模块)?Python - 配置选项,如何输入/处理?

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

我通常使用optparse(Python)并传递选项/参数作为 参数;但我想知道是否更常见的是使用配置文本 所有模块的对象直接读取的文件(但是,不是这个 就像拥有'全局'变量吗?并且没有任何人拥有'状态?)。

另一个典型的问题是单元测试;如果我想单独测试每个单独模块,则特定模块可能只需要5个配置选项中的1个;你通常如何从应用程序的其余部分分离单个 模块/对象,但仍然允许它 接受1点或2所要求的参数(不单元测试框架莫名其妙 调用或接管配置功能)?

我的猜测是,没有一种独特的方法可以做到这一点,但它会让你读到各种方法或众所周知的模式。

+0

我不确定“更新”技术会起作用。 SO并没有在同步更新时做任何优雅的事情。有人的更新会丢失。 – 2009-06-19 20:18:45

回答

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. 
- 
- 
2

你经常读通过配置选项: - GUI选项 命令行/ - 一个配置文本文件

两个。我们使用Django的settings.py和logging.ini。我们还使用命令行选项和参数来更改最频繁的选项。

怎么办多个模块/对象访问这些选项?

  • settings.py; logging.ini - 不能说。
  • 我们的选择是私有的主程序,并可以用于构建
    函数的参数或对象初始化。

[共享optparse选项是在脖子上一个很大的痛苦和不必要的结合了很多的东西放到一个无法验证的混乱。]

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

[I无法解析的问题。我想这是]

答案是“你怎么测试的时候有选择吗?” - 我们不知道。由于只有主要方法解析命令行选项,因此没有其他模块,函数或类对命令行选项有任何概念。没有这个模块“需要5个配置选项中的1个”模块的类(或函数)具有普通的参数,就是这样。

我们只使用optparse