Вопрос по command-line-arguments, environment-variables, configuration-files, configuration – Какой порядок чтения значений конфигурации?

12

Для программы на python, которую я пишу, я хотел бы дать возможность настроить ее тремя различными способами. Переменные среды, файлы конфигурации и аргументы командной строки.

Логически я думаю, что аргументы командной строки всегда должны иметь самый высокий приоритет. Я немного сомневаюсь, что переменные среды должны иметь приоритет над файлами конфигурации? И будет ли иметь значение, являются ли файлы конфигурации системными, специфичными для пользователя или заданы в качестве аргумента в командной строке?

(Обратите внимание, что моей платформой является Unix / Linux)

Ваш Ответ

2   ответа
23

который я знаю, это сначала поиск параметра командной строки, если не найдена среда var, затем локальный файл конфигурации, а затем глобальный файл конфигурации.

Так что когда пакет где-то установлен. Это будет файл конфигурации по умолчанию. Это можно изменить с помощью локального конфигурационного файла. Который может быть переопределен параметром окружения, а затем параметр командной строки имеет наивысший приоритет.

Если файл конфигурации объявлен в командной строке, его содержимое будет иметь приоритет над параметрами среды или любыми другими файлами конфигурации. Но параметры командной строки будут иметь приоритет над ним. Но помните, что путь поиска все еще существует. Если пакет ищет переменную, он ищет.

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 работают аналогичным образом.

& Quot; файл конфигурации в командной строке & quot; позиция спорная По моему опыту, он обычно заменяет стоковые файлы.
Я не знаю, является ли ваш заказ официальным или всегда значимым, но для меня это звучит довольно хорошо :) +1
Я не могу найти какой-либо стандарт для этого сам по себе, но POSIX применяет команду «configuration-> environment- & gt; командная строка»; порядок подачи заявок систематически для коммунальных услуг, охватываемых им.
@ChrisLeishmanSearch over the POSIX utility specs показывает, что немногие из них фактически используют как переменные среды, так и файлы конфигурации. Заmailxони не пересекаются.sh наследует среду от родителя иthen выполняет файл, указанный вENV, Но оболочка обрабатывает env vars и свою собственную одинаково, поэтому она является только естественной. Я не смог найти пример другой программы.
@kingchris Ааа, это похоже на особый вариант,@file, который вставляет параметры из файла и эквивалентен указанию их в командной строке в том же месте. UNIX не нуждается в этом, так как есть обратные ссылки оболочки, но переносимые программы иногда используют это. Я бы не стал называть это "файлом конфигурации" поскольку файлы конфигурации обычно имеют формат, отличный от командной строки.
0

AWS CLI соответствует принятому ответу:

Precedence of options:

If you specify an option by using one of the environment variables described in this topic, it overrides any value loaded from a profile in the configuration file.

If you specify an option by using a parameter on the CLI command line, it overrides any value from either the corresponding environment variable or a profile in the configuration file.

Похожие вопросы