← retour aux snippets

argparse: valeurs par défaut via l'environnement

Lire des valeurs par défaut depuis l'environnement pour un CLI robuste.

python cli #argparse#cli#env

objectif

Lire des valeurs par défaut depuis l’environnement pour un CLI robuste.

code minimal

import argparse, os

def parse(argv=None):
    parser = argparse.ArgumentParser()
    parser.add_argument("--host", default=os.getenv("APP_HOST", "127.0.0.1"))
    parser.add_argument("--port", type=int, default=int(os.getenv("APP_PORT", "8080")))
    return parser.parse_args(argv)

if __name__ == "__main__":
    os.environ["APP_HOST"] = "0.0.0.0"
    os.environ["APP_PORT"] = "9090"
    args = parse([])
    print(f"{args.host}:{args.port}")  # attendu: 0.0.0.0:9090

utilisation

APP_HOST=0.0.0.0 APP_PORT=9090 python app.py  # --> 0.0.0.0:9090
python app.py --host 1.2.3.4 --port 8000     # --> 1.2.3.4:8000

variante(s) utile(s)

import argparse, os

def env_or_default(name: str, default: str):
    return os.getenv(name, default)

p = argparse.ArgumentParser()
p.add_argument("--mode", choices=["dev", "prod"], default=env_or_default("APP_MODE", "dev"))
print(p.parse_args([]).mode in ("dev","prod"))

notes

  • Documentez les variables supportées dans l’aide du CLI.
  • Convertissez proprement types numériques/booleens.