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