指定した相手と通信が可能かどうかを調べるコマンドがpingだ。機器がダウンしていると通信できなくなるため、機器の死活監視にもよく使われている。
監視対象の機器が少ない場合は、相手先を指定▼してpingコマンドを手入力してもかまわない。しかし、対象機器が多くなると、手入力では大変な手間がかかる。
そこで、この作業をPythonで自動化してみよう(図1-1)。まずpingで指定する機器のIPアドレスまたはホスト名の一覧をファイルにしておく。このファイルを読み込んで、それぞれの機器に対してpingを送信するプログラムを記述する。このプログラムを実行すれば、一覧に記されたすべての機器にpingを送れる。対象機器を変えたい場合は、一覧ファイルを編集するだけでいい。
単純なコードから徐々に改良
目的のPythonコードを一気に作るのは大変なので、単純なコードから始めて徐々に改良していこう。最初は、単独のpingコマンドを実行するコードだ(図1-2)。
Pythonコードの中から外部のコマンドを実行する場合には、subprocessというモジュールを利用する。ここではコードの1行目で「import subprocess」と記述して、subprocessをインポート▼している。
subprocessのrunという関数にコマンドの内容を渡すことで、そのコマンドが実行される。コマンドの内容は、コマンドを構成する文字列を並べたリストの形で指定する。ここでは「ping 192.168.1.1 -n 1▼」を実行している。pingによるパケットを1回送信し、応答が返ってきたことを示すメッセージが表示されている。
ただ、pingが表示するメッセージでは、pingが成功したのかどうかが一目では分かりにくい。そこで、run関数が返す「リターンコード」という値を利用してみよう(図1-3)。