Mam skrypt, który ma pewne opcje, które można przekazać w wierszu poleceń lub ze zmiennych środowiskowych. Interfejs CLI powinien mieć pierwszeństwo, jeśli oba są obecne i wystąpi błąd, jeśli żadne z nich nie zostanie ustawione.Ustawianie opcji ze zmiennych środowiskowych podczas korzystania z argparse
Mogłem sprawdzić, czy opcja jest przypisana po analizie, ale wolę, aby argparse wykonywał ciężki lifting i był odpowiedzialny za wyświetlanie instrukcji użycia, jeśli przetwarzanie nie powiedzie się.
Wymyśliłem kilka alternatywnych podejść do tego (które zamieszczę poniżej jako odpowiedzi, aby można je było omówić oddzielnie), ale są dla mnie dość kludgey i myślę, że czegoś mi brakuje.
Czy istnieje zaakceptowany "najlepszy" sposób robienia tego?
(Edit, aby pożądane zachowanie jasne, kiedy zarówno opcja CLI i zmienna jest wyłączony)
Czy domyślnie należy to edytować, aby wyszukać w os.environ? "jeśli envvar w os.environ: default = envvar" -> "jeśli envvar w os.environ: default = os.environ [envvar]" – spazm
Dlaczego używasz tylko wartości określonej przez envvar, jeśli nie ma wartości domyślnej? Czy nie powinien przesłonić wartości domyślnej, ponieważ osoba dzwoniąca wyraźnie podała wartość? –
To rozwiązanie jest świetne. Ma jednak efekt uboczny: w zależności od środowiska (bez względu na to, czy zbiór env jest ustawiony), tekst użycia może się różnić. –