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)")
の様な感じで文字列中の環境変数を取ってくる事が出来る様になります。