Python 3でシェルコマンドを実行する基本的な方法
Pythonでシステムのシェルコマンドを実行する場合、subprocess モジュールが一般的に使用されます。このモジュールを使用すると、新しいプロセスを生成し、入出力パイプを接続し、リターンコードを取得することができます。
基本的なコマンドの実行
subprocess の run 関数を使用して、シェルコマンドを実行し、その出力を取得する最も簡単な方法を見てみましょう。
import subprocess # 'ls'コマンドを実行し、ディレクトリの内容を表示 result = subprocess.run(['ls', '-l'], capture_output=True, text=True) print(result.stdout)
エラーハンドリング
シェルコマンドの実行中にエラーが発生した場合、適切に対処する必要があります。subprocessモジュールは、エラーハンドリングを容易にします。
コマンド実行時のエラーチェック
以下の例では、存在しないコマンドを実行しようとした場合のエラー処理を示しています。
import subprocess try: # 存在しないコマンドを実行 result = subprocess.run(['fake_command'], capture_output=True, text=True, check=True) except subprocess.CalledProcessError as e: print(f"エラー発生: コマンド実行時に問題がありました。{e}")
非同期実行の方法
Pythonのsubprocessモジュールでは、Popenクラスを使用してプロセスを非同期に実行することもできます。これにより、メインのPythonプログラムは子プロセスの終了を待たずに他の操作を続けることができます。
非同期コマンドの実行と出力の取得
以下の例では、Popenを使用してバックグラウンドで ‘ping’ コマンドを実行し、その結果を非同期に処理します。
import subprocess # 非同期に 'ping' コマンドを実行 process = subprocess.Popen(['ping', 'google.com', '-c', '4'], stdout=subprocess.PIPE, text=True) # 出力をリアルタイムで取得 while True: output = process.stdout.readline() if output == '' and process.poll() is not None: break if output: print(output.strip())
この方法を使用すると、プロセスが完了するまでの間に他のタスクを実行することができ、より効率的なプログラムを作成することが可能です。