os.environ.get()
os.environ.get()を使えばシェルで定義された環境変数を取ってこれます。
1 2 3 4 5 | |
2番めの引数はもし$HOMEが設定されてない時に代わりに与えるデフォルト値になります。
省略するとNoneに。
subprocessの中でechoする
単独の変数であればos.environ.get()を使うべきですが、
シェルスクリプト的な書き方をしてあるファイルで
変数が文字列の中に混じっている様なものを変換したい時はちょっと面倒です。
${HOME}の様に{}で囲ってあればその部分を抜き出してやろうと思えば出来ないことも無いですが、
{}にも囲まれて無いような場合はかなり面倒です。
そこでsubprocessを使ってその中で文をechoしてその返り値を使う、という方法を使うと簡単に取ってこれます。
1 2 3 4 5 6 | |
これで/home/userの様なHOMEの値が取得できます。
Popenでデフォルトのshell=Falseな状態では第一引数はコマンドとそれぞれの引数に分けた
配列で渡しますが、
この場合シェルを通さずechoコマンドを行う、と言う形になり
変数の解釈が起こりません。
1 2 3 4 5 6 | |
これだと$HOMEとそのまま文字列が返ってきます。
shell=Trueにすることでコマンドがシェルに渡されて実行される形になるので
$HOME等の値を解釈した上でコマンドを実行してくれます。
もう少し長い文で(とかechoで直接与えるとエラーが出る様な文字列を
含む可能性がある場合には"で囲います。
1 2 3 4 5 6 7 | |
何回も使うなら、
1 2 3 4 5 | |
の様に関数にしておけばparse_env("My home is ($HOME)")
の様な感じで文字列中の環境変数を取ってくる事が出来る様になります。
