結論
PATHが通ってないと動かない様なプログラムをsubprocessから実行するにはshell=Trueが必要?
やりたかったこと
pythonからfortranのプログラムを動かしたかった.
具体的にはこんな感じのものを副次的に呼び出す.
subprocess.run('./hoge.out')
動かしてみると
- 正常に動作してくれない...
- 出力を見てみるとifort(コンパイラ)がfile not foundうんたらかんたら
- PATHが通ってない時によくみる症状
- シェルから動かすと普通に動くのでPATHは通っているはず...
- 試しに副次的じゃなく直接叩くpythonプログラムを書いてみても動いた...
原因
subprocess.run(['echo' '$PATH'])
とすると
$PATH
とそのまま返ってきて何も参照していないのが原因?
調べてみるとこんな記述が...
「PATHを参照したかったらshell=Trueにしろよ!」
「でもシェルインジェクションの危険もあるから気を付けろよ!」
とのこと.
subprocess.run('echo $PATH', shell=True)
とすると無事にPATHが帰ってきた!
subprocess.run('./hoge.out', shell=True)
もちゃんと動作する様になりました!