Pythonのsubprocess
モジュールは、OSコマンドを実行するための強力なツールです。この記事では、Ubuntu環境でPythonのsubprocess
モジュールを使う方法について説明します。
subprocess.runの基本
subprocess.run
は引数のコマンドを同期処理で実行します。コマンドをそのまま文字列として実行したい場合は、shell=True
を指定します。しかし、shell=True
は脆弱性にもつながるので利用には注意が必要です。
import subprocess
subprocess.run(['ls', '-al'])
command = 'ls -al'
ret = subprocess.run(command, shell=True)
print(ret)
上記のコードは、ls -al
コマンドを実行し、その結果を表示します。
戻り値の確認と標準出力、エラー出力のキャプチャ
capture_output=True
のオプションを利用すると標準出力、エラー出力をキャプチャすることができます。戻り値のret.stdout
、ret.stderr
で参照に可能になりますが、この戻り値はバイトデータなのでdecodeが必要です。text=True
のオプションをつけるとdecodeした結果が格納されます。
command = 'ls -al'
ret = subprocess.run(command, shell=True, capture_output=True, text=True)
print(ret.returncode)
print('stdout:' + ret.stdout)
print('stderr:' + ret.stderr)
このコードは、ls -al
コマンドを実行し、その結果、標準出力、エラー出力を表示します。
まとめ
Pythonのsubprocess
モジュールは、OSコマンドを実行するための強力なツールです。しかし、その使用には注意が必要です。特に、shell=True
を使用するときは、脆弱性に注意しなければなりません。また、subprocess.run
の戻り値はバイトデータなので、適切にdecodeする必要があります。.