Python で Bash コマンドを実行する

Muhammad Waiz Khan 2023年1月30日
  1. subprocess モジュールの run() メソッドを使って Python で Bash コマンドを実行する
  2. subprocess モジュールの Popen() メソッドを使って Python でバッシュコマンドを実行する
Python で Bash コマンドを実行する

このチュートリアルでは、Python で bash コマンドを実行するための様々な方法を説明します。Bash は Linux や Unix のオペレーティングシステムで使われているシェルやコマンド言語のインタプリタです。bash コマンドは、カレントディレクトリを変更するための cd コマンド、新しいディレクトリを作成するための mkd コマンド、ディレクトリ内のファイルやサブディレクトリを一覧表示するための ls コマンドなどのように、特定のタスクを実行するためのユーザからオペレーティングシステムへの命令です。

subprocess モジュールの run() メソッドを使って Python で Bash コマンドを実行する

subprocess モジュールの run() メソッドは、渡されたコマンドを文字列として受け取ります。出力やコマンドの出力エラーを取得するには、引数 stdoutstderrPIPE を設定する必要があります。run メソッドは、stdoutstderrreturncode を属性として含む完了したプロセスを返します。

コード例では、run() メソッドを使って Python で bash コマンドを実行する方法を示しています。

from subprocess import PIPE

comp_process = subprocess.run("ls", stdout=PIPE, stderr=PIPE)
print(comp_process.stdout)

subprocess モジュールの Popen() メソッドを使って Python でバッシュコマンドを実行する

subprocess モジュールの Popen() メソッドは run() メソッドと同様の機能を持つが、使いこなすのが難しい。Popen() メソッドは run() メソッドと異なり、完成したプロセスオブジェクトを出力として返さないため、Popen() メソッドで開始したプロセスを個別に処理する必要があり、使いづらい。

Popen() メソッドは完了したプロセスの代わりにプロセスオブジェクトを出力として返します。返されたプロセスは process.kill() または process.terminate() メソッドを使って終了させる必要があります。

run() メソッドと同様に、コマンドの出力とエラーを取得するためには、Popen()stdoutstderr 引数を設定する必要がある。コマンドの出力とエラーを取得するためには、process.communicate メソッドを用いて stdoutstderr の引数を設定する必要があります。

以下のコード例は、Popen() メソッドを用いて bash コマンドを実行する方法と、stdoutstderr の値を取得してプロセスを終了させる方法を Python で示しています。

from subprocess import PIPE

process = subprocess.Popen("ls", stdout=PIPE, stderr=PIPE)
output, error = process.communicate()
print(output)
process.kill