pythonでシステム環境変数を読み込む-その2


概要

pythonでシステム環境変数を読み込む-その1を応用して、システム環境変数を取得するpythonプログラムを作成する。

構成

  • EnvironWrapper.py・・・システム環境変数をカプセル化したpythonクラス
EnvironWrapper.py
import os

class EnvironWrapper:
    """ 
    class:EnvironWrapper

    概要:環境変数から読み込んだ起動パラメータを保持するクラス
    """

    # 環境変数
    defaultenv_context = {
        "SECRET_KEY" : 'naishokey', # SECRET_KEY
        "DEBUG_FLG" : 'true', # DEBUG_FLG
        "ALLOWED_HOSTS" : None,   # ALLOWED_HOSTS
    }
    # 環境変数
    getenv_context = {}
    def __init__(self):
        """
        コンストラクタ
        os.environから環境変数を読み取る
        """
        for key, value in self.defaultenv_context.items():
            param = os.getenv(key, default=value)
            if key == "DEBUG_FLG" :
                param = False if param.lower().startswith('false') else True
            self.getenv_context[key] = param

    def GetParams(self, key : str) -> object:
        """
        GetParams:環境変数取得処理

        Arguments:
            key {str} -- 環境変数キー

        Returns:
            object -- 環境変数値
        """
        return self.getenv_context[key]

if __name__ == "__main__":
    env = EnvironWrapper()

    for key, value in env.getenv_context.items():
        print(f"key:{key}, value:{value}")

システム環境変数にはwindowsの%USERNAME%の様な永続化されたデータも含まれており、必要なシステム環境変数だけに限定したい。
defaultenv_contextで利用するシステム環境変数とそのデフォルト値を定義し、必要なシステム環境変数をgetenv_contextに辞書型で保持する。
os.environがそもそも辞書型なので、environのラッパークラスと命名している。


  • EnvironWrapperRun.bat・・・Windows起動用
EnvironWrapperRun.bat
@ECHO OFF

ECHO <投入値>
REM 設定ファイルの読み込み
FOR /F "usebackq delims== tokens=1,2" %%i IN ("setting.ini") do (
    SET %%i=%%j
    SET %%i
)

ECHO:
ECHO <取得値>
python EnvironWrapper.py

  • EnvironWrapperRun.sh・・・Linux起動用
EnvironWrapperRun.sh
#!/bin/bash

# 設定ファイルの読み込み
echo <投入値>
while read line
do
export $line
echo $line
done < setting.ini

echo <取得値>
python3 EnvironWrapper.py

  • setting.ini・・・システム環境変数を定義した設定ファイル
setting.ini
SECRET_KEY=1234567890qwertyuiopasdfghjklzxcvbnm
DEBUG_FLG=True
ALLOWED_HOSTS=127.0.0.1

今回設定するシステム環境変数はOSに依存しないよう、setting.iniにまとめている。
システム環境変数の使用方法がOSに異なるため、起動用ファイルを分けている。
起動用ファイル内でsetting.iniを1行ずつ読み込んでシステム環境変数にセットしてからpythonプログラムを実行する。

  • windowsではSET 変数名=変数値%変数値%で参照可能
  • Linuxではexport 変数名=変数値$変数値で参照可能、

次の課題

setting.iniの内容でわかる通り、Djangoのsetting.pyで使用する設定値を定義している。
setting.pyの設定値を開発状況(develop-staging-release)に合わせて、起動時にDIできるような仕組みを検討する。