【Python】pingsライブラリでpingの疎通確認とAttributeError: module ‘time’ has no attribute ‘clock’への対処
概要
Pythonでサーバなどの死活監視をしたい、というのは一定の需要があると思います。subprocessを使用することで実現できるらしいですが、もっと簡単に使えるpingsというライブラリが公開されていましたので、こちらを使用してみました。
使用先:
https://github.com/satoshi03/pings
また、使用した中でAttributeErrorが発生したのでその対処法についても記録します。
環境
- Windows10
- Python 3.8.7
以下で作成した環境になります。
Step1 : pings ライブラリのインストール
PyPIで公開されていますのでpipでインストールできます。
pip install pings
----------------
Successfully built pings
Installing collected packages: pings
Successfully installed pings-0.0.1
pings-0.0.1がインストールされました。
Step2 : pingsのimport
早速pyhtonを起動してimport pingsをしてみたところ、エラーが発生
import pings
----------------
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\<user_profile>\.venv\lib\site-packages\pings\__init__.py", line 3, in <module>
from .ping import *
File "C:\Users\<user_profile>\.venv\lib\site-packages\pings\ping.py", line 13, in <module>
timer = time.clock
AttributeError: module 'time' has no attribute 'clock'
エラーメッセージを見ると、ping.pyのtimer = time.clockにてclockメソッドがないよ、と言われています。
自分の環境はpython3.8ですが、調べるとどうやら3.8ではtime.clockは既に無くなっているらしい。
参考サイト:
エラー対処方法
エラーを解消すべく、time.clockを使用している箇所を手動で修正することにしました。
~\site-packages\pingsping.pyを開き、該当箇所のtime.clockをtime.timeに変更しました。
if sys.platform.startswith("win32"):
#timer = time.clock
timer = time.time
else:
timer = time.time
これで再度import pingsしたところ、エラーが出なくなりました。ひとまずこれでOKと判断して、さっそくpingsを実際に使ってみます。
Step3 : pings動作確認
GiHubを参考にしてテストしてみました。
import pings
p = pings.Ping()
response = p.ping("google.com")
response.is_reached()
>>> True
response.print_messages()
>>>> PING google.com (172.217.24.142): 55 data bytes
>>>> 47 bytes from 172.217.24.142: icmp_seq=0 ttl=110 time=87.805 m
上記の通り、pythonからpingを通すことができました。
まとめ
pingsは非常に短くシンプルなコードでpingの疎通確認を行えるため非常に良いライブラリでした。
3.8環境でエラーが出ましたが、すぐに解決できたのであまり苦労せず使えました。
Pythonを基本から学ぶにはコチラがおすすめ