Python で Bash コマンドを実行する
-
subprocessモジュールのrun()メソッドを使って Python で Bash コマンドを実行する -
subprocessモジュールのPopen()メソッドを使って Python でバッシュコマンドを実行する
このチュートリアルでは、Python で bash コマンドを実行するための様々な方法を説明します。Bash は Linux や Unix のオペレーティングシステムで使われているシェルやコマンド言語のインタプリタです。bash コマンドは、カレントディレクトリを変更するための cd コマンド、新しいディレクトリを作成するための mkd コマンド、ディレクトリ内のファイルやサブディレクトリを一覧表示するための ls コマンドなどのように、特定のタスクを実行するためのユーザからオペレーティングシステムへの命令です。
subprocess モジュールの run() メソッドを使って Python で Bash コマンドを実行する
subprocess モジュールの run() メソッドは、渡されたコマンドを文字列として受け取ります。出力やコマンドの出力エラーを取得するには、引数 stdout と stderr に PIPE を設定する必要があります。run メソッドは、stdout、stderr、returncode を属性として含む完了したプロセスを返します。
コード例では、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() の stdout と stderr 引数を設定する必要がある。コマンドの出力とエラーを取得するためには、process.communicate メソッドを用いて stdout と stderr の引数を設定する必要があります。
以下のコード例は、Popen() メソッドを用いて bash コマンドを実行する方法と、stdout と stderr の値を取得してプロセスを終了させる方法を Python で示しています。
from subprocess import PIPE
process = subprocess.Popen("ls", stdout=PIPE, stderr=PIPE)
output, error = process.communicate()
print(output)
process.kill