Python 3.5的一个窗口化小工具,定时ping列表中的服务器。
程序启动配置的两种方式
- 预定义:下方代码去掉
iplist.update
的注释即可。
格式为iplist.update({“主机”:“注释”})
iplist = dict()
#iplist.update({"14.215.177.39":"百度ip"})
#iplist.update({"www.baidu.com":"百度"})
- 启动后输入:进入程序后输入地址*(没有地址注释功能)*,只需将所有
iplist.update
都注释掉即可。
程序界面
Windows界面 | Linux界面 (树莓派) |
---|---|
![]() | ![]() |
每行的格式为:地址注释 地址 [延迟(ms)]
#地址列表
iplist = dict()
iplist.update({"14.215.177.39":"百度ip"})
iplist.update({"www.baidu.com":"百度"})
每输入一行地址回车输入下一行,输入0结束输入。
背景颜色
状态 | 背景色 | [文字信息] |
---|---|---|
正常 | #7FFFAA | 延迟值 |
缓慢 | #FFD700 | 延迟值 |
一次Ping失败 | #FFD39B | X |
两次Ping失败 | #FF8C69 | XX |
三次及以上Ping失败 | #FF2222 | XXX |
示例:两次ping失败
依赖库 tkinter 安装
windows下Python3.2版本之后是自动安装tkinter。如需安装参考下方的连接
https://blog.csdn.net/qq_32005671/article/details/72903018 by:数据阿伯
最后贴上代码
import os
import sys
import platform
import tkinter as tk
"""
窗口Ping工具
by MaxMiku Feb 9th 2019
适配Windows与linux
可以选择预定义或者进入程序后再输入目标主机
预定义只需将下方解除定义注释即可
iplist.update({"主机":"注释"})
"""
#地址列表
iplist = dict()
iplist.update({"14.215.177.39":"百度ip"})
iplist.update({"www.baidu.com":"百度"})
#窗口宽度 若地址显示不全可以自定义
win_weight=200
#========代码部分==========
#获取系统版本 区分指令
osver=sys.platform
print("Now system is %s"%osver)
if(osver.find("win",0,len(osver))!=-1):
#win
Iswin=True
ping_comm='ping -n 1 -w 1 %s'
line_head="来自 "
delay_head=" 时间"
delay_foot="ms "
else:
#linux
Iswin=False
ping_comm='ping -c 1 -w 1 %s'
line_head="64 bytes from"
delay_head=" time="
delay_foot=" ms"
#截取字符串
def getCenterText(source,head,end,includeHeadAndEnd=False,skip=0):
"""
includeHeadAndEnd 是否包含头尾 0假 1真
skip 跳过次数 int
"""
pot_s=0#起始位置
pot_e=0#终止位置
len_soc=len(source)#长度
result=""#结果
count=skip#跳过计数
pot_s=source.find(head,0,len_soc)+len(head)
while(pot_s!=-1 & count>0):
pot_s=source.find(head,pot_s+1,len_soc)+len(head)
count=count-1
if(pot_s!=-1):
pot_e=source.find(end,pot_s+1,len_soc)
if(pot_e!=-1):
result=source[pot_s:pot_e]
else:
return ""
else:
return ""
if(includeHeadAndEnd):
return head+result+end
else:
return result
timeout_count=dict()
getin="0"
if(len(iplist)==0):
getin=input("Please input the ip [1]:")
while(getin!="0"):
iplist.update({"%s"%getin:""})
getin=input("Please input the ip(0 to continue)["+str(len(iplist)+1)+"]:")
win_heigh=0
num_ip=0
print("List: "+str(len(iplist)))
for ip in iplist:
num_ip=num_ip+1
print(str(num_ip)+" ==> "+str(ip))
timeout_count.update({ip:0})
if(Iswin):
win_heigh=num_ip*42
else:
win_heigh=num_ip*34
def ping_host(ip):
"""
返回延迟 失败返回-1
"""
backinfo=os.popen(ping_comm%ip).read()
# print(backinfo)
#~ print(getCenterText(backinfo,"64 bytes from","\n",True))
delay=getCenterText(getCenterText(backinfo,line_head,"\n",True),delay_head,delay_foot)
if(Iswin):
delay=delay[1::]
if (delay!=""):
#~ print("delay is %s"%delay)
return float(delay)
else:
#~ print("Ping failed.")
return -1.0
window = tk.Tk()#创建窗口
window.wm_attributes('-topmost',1)#置顶
window.title('Ping!')
window.geometry('%sx%s'%(win_weight,win_heigh))#动态设置高度
txtLab=dict()#存放标签文本
for ip in iplist:
var = tk.StringVar() # 文字变量储存器
label=tk.Label(window,
textvariable=var,
#~ bg='green', # 背景颜色
font=('Arial', 12), # 字体和字体大小
width=33, height=2 ) # 标签长宽)
label.pack() # 固定窗口位置
temp={"%s"%ip:var,"%sojb"%ip:label}
txtLab.update(temp)
for ip in iplist:
a=txtLab.get(ip)
a.set(ip)
def pingit():
global timeout_count
for ip in iplist:#尝试调用
ret=ping_host(ip)
if(ret==-1):
tmp=timeout_count.get(ip)
tmp=tmp+1
timeout_count.update({ip:tmp})
if(tmp>3):
tmp=3
a=txtLab.get(ip)
a.set(iplist.get(ip)+" "+ip+" ["+"X"*tmp+"]")
if(tmp==1):
a=txtLab.get("%sojb"%ip)
a.config(bg='#FFD39B')
else:
if(tmp==2):
a=txtLab.get("%sojb"%ip)
a.config(bg='#FF8C69')
else:
if(tmp==3):
a=txtLab.get("%sojb"%ip)
a.config(bg='#FF2222')
#~ print(ip+" Failed to ping.")
else:
tmp=timeout_count.get(ip)
if(tmp!=0):
timeout_count.update({ip:0})
a=txtLab.get(ip)
if(Iswin):
a.set(iplist.get(ip)+" "+ip+" [%.0f]"%ret)
else:
a.set(iplist.get(ip)+" "+ip+" [%.1f]"%ret)
if(ret>250):
a=txtLab.get("%sojb"%ip)
a.config(bg='#FFD700')
else:
a=txtLab.get("%sojb"%ip)
a.config(bg='#7FFFAA')
#~ print(ip+" %.1f"%ret)
#~ currentTime=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
#~ Label1.config(text=currentTime)
window.update()
window.after(1000, pingit)
window.after(1000, pingit)
window.mainloop()