当您的应用程序采用几(〜5)配置参数时,该应用程序将由非技术用户使用(即 ),您通常如何处理读取配置选项,然后在对象/函数之间(多个模块)之间传递参数?

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

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

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

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

有帮助吗?

解决方案 2

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

其他提示

您通常通过以下方式读取配置选项:- 命令行/GUI选项 - 配置文本文件

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

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

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

[共享 optparse 选项是一件令人头疼的事情,而且不必要地将很多东西绑定到无法测试的混乱中。]

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

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

答案是——我们不知道。由于只有 main 方法解析命令行选项,因此其他模块、函数或类都不了解命令行选项。没有这个模块“需要 5 个配置选项中的 1 个”模块的类(或函数)具有普通参数,仅此而已。

我们只使用 optparse.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top