概要
python の環境変数の読み込みはいくつかの方法があります
どの方法でも読み込み後は文字列として処理されます
一度読み込んだあとにキャストすれば良いのですが面倒です
今回は読み込み時に型変換して使う方法を紹介します
環境
- macOS 10.15.6
- Python 3.8.3
サンプルコード
import os
str_val = os.environ.get("STR_VAL", "hoge")
print(str_val)
print(str_val.__class__)
int_val = int(os.environ.get("INT_VAL", 5))
print(int_val)
print(int_val.__class__)
from distutils.util import strtobool
bool_val = strtobool(os.environ.get("BOOL_VAL", "True"))
print(bool_val)
print(bool_val.__class__)
list_val = os.environ.get("LIST_VAL", "1,2,3").split(",")
print(list_val)
print(list_val.__class__)
import json
dict_val = json.loads(os.environ.get("DICT_VAL", '{"key":"value"}'))
print(dict_val)
print(dict_val.__class__)
list_val2 = json.loads(os.environ.get("LIST_VAL2", '["1", "2", "3"]'))
print(list_val2)
print(list_val2.__class__)
動作確認
STR_VAL=fuga python3 test.py
INT_VAL=100 python3 test.py
BOOL_VAL=False python3 test.py
LIST_VAL="3,4,5" python3 test.py
DICT_VAL='{"key2":"value2"}' python3 test.py
LIST_VAL2='["a",4,5]' python3 test.py
解説
基本は各型にキャストすれば OK です
bool や list, dict は少し特殊です
list は split を使っていますが dict 同様に json.loads
でも OK です
bool は True ならば「1」Falseならば「0」として扱われます
今回の場合の問題点はキャストできない型の値が環境変数にセットされていると Exception が発生する点です
0 件のコメント:
コメントを投稿