合理主義的グルメブログ

学生起業家の日常をツラツラと書いています。主に食事情報です。

Pythonで環境変数を参照する

最近はどっぷりとPythonに浸かっているので,
別々のコンピュータで,互換性の高いプログラムを書きたいことが多いです.

その時に,環境変数が参照できると便利なので,
N番線時になりますが,メモっておきます.

結論から言うと,os.environ.get(varname[, value])でできます.

僕のuse caseで言うと,こんな感じで使いました.
openAIのbaselinesと言うライブラリを浸かっていましたが,
ログのフォーマットを確認したい時に使いました.

os.environ.get('OPENAI_LOG_FORMAT', 'tensorboard')

OPENAI_LOG_FORMATが,参照する環境変数名になります.
後ろにくっついているtensorboardは,OPENAI_LOG_FORMATが存在しない場合に,セットする値になります.
返り値はOPENAI_LOG_FORMATの値になります.

コレをもう少し書き加えると,こんな感じで,loggerの設定をすることができます.

# logger
if args.tensorboard:    # for tensorboard
    # logのformatを確認
    if os.environ.get('OPENAI_LOG_FORMAT', 'tensorboard') != 'tensorboard':
        logger.warn(
            "Overwriting OPENAI_LOG_FORMAT to 'tensorboard', which was '{}'".format(os.environ['OPENAI_LOG_FORMAT']))
    os.environ['OPENAI_LOG_FORMAT'] = 'tensorboard'
    # logを保存するpathを確認
    if os.environ.get('OPENAI_LOGDIR', args.tensorboard) != args.tensorboard:
        logger.warn(
            "Overwriting OPENAI_LOGDIR to '{}', which was '{}'".format(args.tensorboard, os.environ['OPENAI_LOGDIR']))
    os.environ['OPENAI_LOGDIR'] = args.tensorboard
    # launch tensorboard
    logger.warn('Launching Tensorboard...')
    tensorboard_pid = Popen(['tensorboard', '--logdir', args.tensorboard]).pid
    def kill_tb():
        os.kill(tensorboard_pid, signal.SIGTERM)
    atexit.register(kill_tb)
logger.configure(format_strs=['tensorboard', 'log'])