Аргументы из cli. Python
А также из переменных окружения
Возникла задача: написать консольную программу на Python, которая:
- принимает аргументы командной строки;
- умеет брать значения из переменных окружения;
- умеет читать
.env; - даёт значения по умолчанию.
Рабочий сниппет использует пакеты click и environs.

Логика переопределения значений
- Если переменная нигде не объявлена (опциональная, есть дефолт) — берётся значение по умолчанию.
- Значение может лежать в глобальной переменной окружения.
- Значение из файла
.env(рядом с программой) переопределяет глобальное окружение. - Параметр командной строки переопределяет всё вышеперечисленное.
Это стандартное поведение для CLI‑приложений и сервисов.
Сниппет на Python
python
#!/usr/bin/env python3
import click
from environs import Env
env = Env()
# Чтение переменных окружения из файла .env, если он существует.
env.read_env()
# Переменные среды будут читаться с этим префиксом:
# MYAPP_SERVICE, MYAPP_USER, MYAPP_PASS
with env.prefixed("MYAPP_"):
default = {
"service": env("SERVICE", "https://google.com"),
"user": env("USER", None),
"pass": env("PASS", None),
}
@click.command()
@click.option(
"--service",
"-s",
help="Address of the Service.",
prompt="Please enter address of Service",
default=env("SERVICE", default["service"]),
)
@click.option(
"--user",
"-u",
help='Your username of service "%s".' % default["service"],
required=True,
prompt="Please enter Username",
default=default["user"],
)
@click.option(
"--pass",
"-p",
"password",
help='Your password of service "%s".' % default["service"],
required=True,
hide_input=True,
confirmation_prompt=True,
prompt="Please enter Password",
default=default["pass"],
)
def run_my_app(service, user, password):
click.echo(
{
"service": service,
"user": user,
"password": password,
}
)
if __name__ == "__main__":
run_my_app()Примеры поведения
1. Запуск без параметров
Если нет ни глобальных переменных, ни .env, ни CLI‑аргументов — используются значения по умолчанию (например, сервис https://google.com, пустые логин/пароль).

2. Переменные в .env или глобальном окружении
Файл .env рядом с программой:
text
MYAPP_SERVICE=http://localhost
MYAPP_USER=Still Max
MYAPP_PASS=Super secret PasswordПри запуске без аргументов возьмутся эти значения. То же самое, если переменные заданы в глобальном окружении.

3. Запуск с параметрами
CLI‑аргументы (--service/--user/--pass) перекрывают всё остальное — и .env, и глобальное окружение, и дефолты.
