Pythonからシェルスクリプトを呼び出す方法
Pythonはその柔軟性と使いやすさから、さまざまなタスクで利用されています。特に、Pythonスクリプトからシェルスクリプトを呼び出すことで、システム管理や自動化タスクを効率よく行うことができます。この記事では、Pythonからシェルスクリプトを実行する方法をいくつかの例とともに解説します。
subprocessモジュールを使ったシェルスクリプトの実行
Pythonでシェルコマンドを実行する最も一般的な方法は、subprocess
モジュールを使用することです。このモジュールは、外部のコマンドやシェルスクリプトを実行するための柔軟なインターフェースを提供します。
import subprocess # シェルスクリプトの実行 result = subprocess.run(['sh', 'example_script.sh'], capture_output=True, text=True) # 結果の表示 print("Return code:", result.returncode) print("Output:", result.stdout) print("Error:", result.stderr)
上記の例では、subprocess.run()
を使用してexample_script.sh
というシェルスクリプトを実行しています。capture_output=True
を指定することで、標準出力と標準エラーをキャプチャし、text=True
を指定することで、出力を文字列として扱います。
os.systemを使ったシェルスクリプトの実行
簡単なコマンド実行には、os.system()
を使用することもできます。この関数は、指定されたコマンドをシステムシェルで実行しますが、出力をキャプチャすることはできません。
import os # シェルスクリプトの実行 exit_code = os.system('sh example_script.sh') # 結果の表示 print("Exit code:", exit_code)
この方法は非常にシンプルですが、出力を処理する必要がある場合にはsubprocess
を使用する方が適しています。
シェルスクリプトの出力をリアルタイムで取得する方法
シェルスクリプトの実行中にリアルタイムで出力を取得したい場合、subprocess.Popen
を使用することができます。
import subprocess # シェルスクリプトの実行とリアルタイム出力 process = subprocess.Popen(['sh', 'example_script.sh'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) # 出力の逐次表示 for line in process.stdout: print(line, end='') # 終了コードの取得 process.wait() print("Return code:", process.returncode)
この例では、Popen
を使ってプロセスを開始し、stdout
からリアルタイムで出力を読み取っています。これは、長時間実行されるスクリプトの進行状況を追跡するのに便利です。
まとめ
Pythonからシェルスクリプトを呼び出す方法は複数ありますが、目的に応じて適切な方法を選ぶことが重要です。subprocess
を使用することで、より柔軟で強力なコマンド実行が可能になります。特に、出力を処理したい場合やリアルタイムでの出力を必要とする場合には、subprocess.run
やsubprocess.Popen
を活用しましょう。
Pythonコードからシェルスクリプトを呼び出す方法は、Pythonのsubprocessモジュールを使用することで実現できます。subprocessモジュールを使うと、Pythonコード内から外部のプログラムやシェルスクリプトを実行することができます。
以下は、Pythonコードからシェルスクリプトを呼び出す基本的な方法です。
“`python
import subprocess# シェルスクリプトを呼び出す
subprocess.call([‘./your_script.sh’])
“`上記の例では、`subprocess.call()`関数を使用して、指定したシェルスクリプト(ここでは`your_script.sh`としています)を呼び出しています。シェルスクリプトのパスは、リスト形式で指定する必要があります。
また、`subprocess`モジュールには他にも様々な関数が用意されており、シェルスクリプトの標準出力やエラー出力を取得したり、入力を渡したりすることも可能です。詳細については、Pythonの公式ドキュメントやサンプルコードを参照してください。