設定ファイルやちょっとしたファイルで、一部のみ動的に変更したい場合があります。
とくに、Dockerコンテナなんかで使う場合は、環境変数で動作を変えられると便利です。
かっこいいテンプレートエンジンを使ってもいいのですが、それほどでもない場合のやり方です。
いつも忘れてしまうので、ここにメモしておきます。
設定ファイルのようなもの
次のようなファイルの${NAME}の部分を環境変数で置き換える方法を考えます。
something.conf
[Setting]
name=${NAME}
環境変数設定
次のように環境変数に入れておきます。
# export NAME=hirachan
シェルスクリプトの場合
実は、シェルスクリプトでもできます。envsubstというコマンドでできるので、紹介しておきます。入っていない場合は、gettextのパッケージを入れましょう。
# envsubst < something.conf
[Setting]
name=hirachan
おーー。置き換わりました。
いい感じです。
Pythonの場合
さて、Pythonの場合です。
Pythonには、os.path.expandvarsという便利な関数があります。
os.pathにあるのでファイルのPATHをごにょごにょするための関数のようですが、問題なく使えます。
expand.py
import os
import sys
with open("something.conf", "r") as fr:
out = os.path.expandvars(fr.read())
sys.stdout.write(out)
実行してみましょう。
# python3 expand.py
[Setting]
name=hirachan
おーー。すばらしいですね。
まとめ
環境変数の展開は、シェルではenvsubst
、Pythonではos.path.expandvars
が便利です。