1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

概要

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できるような仕組みを検討する。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?