Python - 配置选项,如何输入/处理?
当您的应用程序需要几个(~ 5)个配置参数,并且应用程序正在运行时 由非技术用户使用(即 KISS),您通常如何处理阅读 配置选项,然后在对象/函数之间传递参数 (多个模块)?
选项示例:输入和输出目录/文件名、详细级别。
我通常使用 optparse (Python) 并将选项/参数传递为 论据; 但我想知道使用配置文本是否更常见 所有模块的对象直接读取的文件(但是,这不是 就像拥有“全局”变量?并且没有任何人“拥有”状态?)。
另一个典型的问题是单元测试; 如果我想对每个进行单元测试 独立的单个模块,特定模块可能只需要 5 个配置选项中的 1 个; 你通常如何解耦个人 来自应用程序其余部分的模块/对象,但仍然允许它 接受 1 或 2 个必需参数(单元测试框架是否以某种方式 调用或接管配置功能)?
我的猜测是,没有一种独特的正确方法可以做到这一点,但它会 阅读各种方法或众所周知的模式会很有趣。
When your application takes a few (~ 5) configuration parameters, and the application is going
to be used by non-technology users (i.e. KISS), how do you usually handle reading
configuration options, and then passing around the parameters between objects/functions
(multiple modules)?
Options examples: input and output directories/file names, verbosity level.
I generally use optparse
(Python) and pass around the options/parameters as
arguments; but I'm wondering if it's more common to use a configuration text
file that is read directly by all modules' objects (but then, isn't this
like having 'global' variables?, and without anyone 'owning' the state?).
Another typical issue is unit testing; if I want to unit test each
single module independently, a particular module may only require
1 out of the 5 configuration options; how do you usually decouple individual
modules/objects from the rest of the application, and yet still allow it to
accept 1 or 2 required parameters (does the unit test framework somehow
invoke or take over the configuration functionality)?
My guess is that there is not a unique correct way to do this, but it'd
be interesting to read about various approaches, or well-known patterns.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您通常通过以下方式读取配置选项:
- 命令行/图形用户界面选项
- 配置文本文件
两者。 我们使用Django的settings.py和logging.ini。 我们还使用命令行选项和参数来表示最常更改的选项。
多个模块/对象如何访问这些选项?
函数或对象初始值设定项的参数。
[共享 optparse 选项是一件很痛苦的事情,而且不必要地将很多东西绑定到不可测试的混乱中。]
在对单个模块(不是“主”模块)进行单元测试时:
(例如读取指定输入文件名的选项)
[我无法解析问题。 我认为这是“当有选择时你如何测试?”]
答案是——我们不这样做。 由于只有 main 方法解析命令行选项,因此其他模块、函数或类都不了解命令行选项。 没有这个模块“需要 5 个配置选项中的 1 个”模块的类(或函数)具有普通参数,仅此而已。
我们只使用
optparse
。Do you usually read config options via:
- command-line/gui options
- a config text file
Both. We use Django's settings.py and logging.ini. We also use command-line options and arguments for the options that change most frequently.
How do multiple modules/objects have access to these options?
arguments to functions or object initializers.
[Sharing the optparse options is a big pain in the neck and needless binds a lot of things into an untestable mess.]
When doing unit-testing of a single module (NOT the "main" module):
(e.g. read option specifying input filename)
[I can't parse the question. I assume this is "how do you test when there are options?"]
The answer is -- we don't. Since only the main method parses command-line options, no other module, function or class has any idea of command-line options. There's no this module "require 1 out of the 5 config options" The module's classes (or functions) have ordinary arguments and that's that.
We only use
optparse
.