全1619文字
PR

 指定した相手と通信が可能かどうかを調べるコマンドがpingだ。機器がダウンしていると通信できなくなるため、機器の死活監視にもよく使われている。

 監視対象の機器が少ない場合は、相手先を指定してpingコマンドを手入力してもかまわない。しかし、対象機器が多くなると、手入力では大変な手間がかかる。

 そこで、この作業をPythonで自動化してみよう(図1-1)。まずpingで指定する機器のIPアドレスまたはホスト名の一覧をファイルにしておく。このファイルを読み込んで、それぞれの機器に対してpingを送信するプログラムを記述する。このプログラムを実行すれば、一覧に記されたすべての機器にpingを送れる。対象機器を変えたい場合は、一覧ファイルを編集するだけでいい。

図1-1●機器一覧を読み込んでpingを自動送信
図1-1●機器一覧を読み込んでpingを自動送信
機器一覧のファイルを読み込んで、それぞれに対してpingを送信すれば、手動でいちいちpingを送信する手間が省ける。ファイルに記された機器を追加/削除すれば、死活監視の対象を簡単に変更できる。
[画像のクリックで拡大表示]

単純なコードから徐々に改良

 目的のPythonコードを一気に作るのは大変なので、単純なコードから始めて徐々に改良していこう。最初は、単独のpingコマンドを実行するコードだ(図1-2)。

図1-2●subprocessモジュールでpingコマンドを実行
図1-2●subprocessモジュールでpingコマンドを実行
Pythonではsubprocessモジュールを利用することで外部のコマンドを実行できる。ここでは「ping 192.168.1.1 ‒n 1」を実行し、pingによるパケットを1回送信している。
[画像のクリックで拡大表示]

 Pythonコードの中から外部のコマンドを実行する場合には、subprocessというモジュールを利用する。ここではコードの1行目で「import subprocess」と記述して、subprocessをインポートしている。

 subprocessのrunという関数にコマンドの内容を渡すことで、そのコマンドが実行される。コマンドの内容は、コマンドを構成する文字列を並べたリストの形で指定する。ここでは「ping 192.168.1.1 -n 1」を実行している。pingによるパケットを1回送信し、応答が返ってきたことを示すメッセージが表示されている。

 ただ、pingが表示するメッセージでは、pingが成功したのかどうかが一目では分かりにくい。そこで、run関数が返す「リターンコード」という値を利用してみよう(図1-3)。

図1-3●pingが成功したかどうかはリターンコードで分かる
図1-3●pingが成功したかどうかはリターンコードで分かる
リターンコードを調べることで、pingが成功したかどうかが分かる。リターンコードは、pingが成功したときには0、失敗したときには0以外になる。
[画像のクリックで拡大表示]