Pythonでシェルを実行させる



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で行い、抽出した値などをシェルに引数として渡して実行するなど、業務の運用に活用させたいと思います。

Previous
Next Post »

人気の投稿