У меня есть скрипт оболочки bash (работающий в Ubuntu 18.04), который читает некоторые входные данные (файл или пользователь) и присваивает нескольким переменным (окружения) различные значения в зависимости от ввода.Сценарий запускает программу (python), которой затем в разных точках выполнения требуются значения, которые были назначены переменным среды.
Общий подход, который я использую до сих пор, выглядит следующим образом
# shell script
[...]
export VAR_A = value1
export VAR_B = value2
python program.py
[...]
Программа состоит из нескольких классов, которым иногда требуются значения, установленные в сценарии.
# class1.py, used by program.py
import helper
[...]
var_a = helper.get_var_a()
var_b = helper.get_var_b()
[...]
Вспомогательный класс используется для фактического чтения переменных среды.
# helper.py
[...]
import os
def get_var_a():
return os.environ["VAR_A"]
Код делает то, что делает правильно.Это, однако, не выглядит «хорошо», и я сомневаюсь, что это следует за любой передовой практикой.То, что я хотел бы, или ищу, - это метод, который либо читает переменные окружения один раз и сохраняет их в переменной программы.Что-то вроде следующего:
# helper.py
# [...]
import os
ENVIRONMENT = { "VAR_A" : os.environ["VAR_A"], "VAR_B" : os.environ["VAR_B"] }
[...]
И чтобы получить это:
# class1.py
var_a = helper.ENVIRONMENT["VAR_A"]
Вопрос: Это (фрагмент выше) лучше илихудший подход по очереди:
- Удобочитаемость / ремонтопригодность
- Выполнение кода / эффективность
- Любая другая более оптимальная или "питоническая" альтернатива?