Pythonからシェルを実行する方法を調べたので、忘れないように書き残しておきます。
*環境
- MacOS
- Python 2.7
*参考
*subprocess
os.system(cmd)
でもコマンドを実行できるようですが非推奨になっていて、subprocessを使って実装するのが一般的なようです。subprocess.call(cmd)
とすると、引数で渡したコマンドを実行することができます。subprocess.Popen(cmd)
はバックグラウンドで実行します。2つめの引数に
shell=True
を指定しないと、コマンド内のスペースを認識してくれないようです。同ディレクトリにあるシェルを、絶対パスで指定して実行するサンプルコードを書いてみました。
今回はシェルに引数を渡して実行しています。
<call_shell.py>
# -*- coding: utf-8 -*-
import os
import subprocess
def call_shell():
path = os.path.dirname(os.path.abspath(__file__))
cmd = '{}/hello.sh {}'.format(path, 1)
res = subprocess.call(cmd, shell=True)
print(res)
if __name__ == '__main__':
call_shell()
<hello.sh>
#!/bin/bash
if [ $# -ne 1 ]; then
echo "引数に数値を1つ指定してください。" 1>&2
exit 1
fi
cat <<__EOT__
正常にシェルが実行されました!!(引数:$#)
__EOT__
exit 0
<実行結果>
$ python call_shell.py
正常にシェルが実行されました!!(引数:1)
0
正常に実行されると、レスポンスで
0
が返却されます。エラーだった場合はエラーコードが返却されます。
*所感
Pythonで簡単にシェルを実行させることができました。コマンドを指定するだけなので、どんなコマンドでも実行できそうです。私はシェルが得意ではないので、面倒な処理をPythonで行い、抽出した値などをシェルに引数として渡して実行するなど、業務の運用に活用させたいと思います。
Sign up here with your email
ConversionConversion EmoticonEmoticon