Configuration 读取配置值的顺序是什么?

Configuration 读取配置值的顺序是什么?,configuration,environment-variables,command-line-arguments,configuration-files,Configuration,Environment Variables,Command Line Arguments,Configuration Files,对于我正在编写的python程序,我想提供以三种不同方式配置它的机会。环境变量、配置文件和命令行参数 从逻辑上讲,我认为命令行参数应该始终具有最高优先级。我有点怀疑环境变量是否应该优先于配置文件?配置文件是系统范围的、特定于用户的还是作为命令行上的参数提供的,这是否重要 (请注意,我的平台是Unix/Linux)我知道的标准是首先查找命令行参数,如果找不到环境变量,则查找本地配置文件,然后查找全局配置文件 因此,当某个包安装在某个地方时。它将有一个默认的配置文件。这可以通过本地配置文件进行更改。

对于我正在编写的python程序,我想提供以三种不同方式配置它的机会。环境变量、配置文件和命令行参数

从逻辑上讲,我认为命令行参数应该始终具有最高优先级。我有点怀疑环境变量是否应该优先于配置文件?配置文件是系统范围的、特定于用户的还是作为命令行上的参数提供的,这是否重要


(请注意,我的平台是Unix/Linux)

我知道的标准是首先查找命令行参数,如果找不到环境变量,则查找本地配置文件,然后查找全局配置文件

因此,当某个包安装在某个地方时。它将有一个默认的配置文件。这可以通过本地配置文件进行更改。可以使用environ参数覆盖,然后命令行参数具有最高优先级

如果在命令行上声明配置文件,则其内容将优先于环境参数或任何其他配置文件。但是命令行参数将优先于它。 但请记住,搜索路径仍然存在。如果包正在查找它要查找的变量

Command line.
Config file thats name is declared on the command line.
Environment vars
Local config file (if exists)
Global config file (if exists)
我认为许多命令行编译器和Boost library config pak以类似的方式工作

符合公认的答案:

选项的优先顺序:

  • 如果使用本主题中描述的环境变量之一指定选项,则该选项将覆盖从配置文件中的配置文件加载的任何值

  • 如果使用CLI命令行上的参数指定选项,它将覆盖配置文件中相应环境变量或配置文件中的任何值


“命令行上的配置文件”位置是有争议的。根据我的经验,它通常会替换股票文件。我找不到任何标准,但是POSIX系统地为它所涵盖的实用程序强制执行“配置->环境->命令行”应用程序命令。@kingchris啊,这看起来像一个特殊选项,
@file
,这将从文件中插入选项,相当于在同一位置的命令行中指定它们。UNIX不需要这样做,因为有shell backticks,但可移植程序有时会使用它。我不会称此为“配置文件”,因为配置文件的格式通常与命令行不同。@ivan_pozdeev您有POSIX强制执行的示例吗?让一个工具支持环境变量而不是配置文件似乎很奇怪,因为如果有一个用户不知道的环境变量集,这将非常混乱。所以我想要一个或三个例子。@ChrisLeishman表明,很少有人同时使用环境变量和配置文件。对于
mailx
,它们不相交。从父级继承环境,然后执行
ENV
中指定的文件。但是,一个外壳对待环境变量和它自己的一样,所以它只是自然的。我找不到其他程序的示例。