0
0

More than 3 years have passed since last update.

subprocessでPATHが必要な外部プログラムを動かす時,実行エラー

Last updated at Posted at 2020-06-16

結論

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にしろよ!」
- stackoverrunより

「でもシェルインジェクションの危険もあるから気を付けろよ!」
- pythonドキュメントより

とのこと.
subprocess.run('echo $PATH', shell=True)
とすると無事にPATHが帰ってきた!
subprocess.run('./hoge.out', shell=True)
もちゃんと動作する様になりました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0