1.paramiko建立连接
def tk_Connect_service(cmd):
#获取IP
mcsip = EntryMSCIP.get()
# 获取SSHClient实例
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接SSH服务端
try:
client.connect(mcsip, username="", password="", port=)
stdin, stdout, stderr = client.exec_command(command=cmd)
result = stdout.read().decode('utf-8')
return result
except:
messagebox.showerror('提示', '未能连接SSH服务端')
frameccu.destroy()
btn1.config(state='disable')
Radiobuttonsucess.config(bg='grey')
2.远程查询指定路径下的目录
?
#dir存放路径
dir = []
#起始路径
file_path = '/home'
def tk_Get_Mapdir(self):
#清空dir
dir.clear()
#插入起始路径
dir.append(file_path)
#listbox作为目录展示
listbox.delete(0, 'end')
#s1 = "| awk '{print $9}'"
#过滤掉不需要展示的目录
s2 = "| grep ginger_[maplog]"
cmd = 'ls %s %s' % (file_path, s2)
print(cmd)
#paramiko远程执行命令
result = method.tk_Connect_service(cmd=cmd)
#输出的结果拼在一起
i = ' '.join(result.split())
s = i.split(' ')
if s != '':
#将路径展示到label
labelpath.config(text=file_path)
for k in s:
#listbox作为目录展示
listbox.insert('end', k)
else:
listbox.insert('end', '没有查询到地图文件')
3.双击listbox中的目录实现进入下级目录,右键菜单返回上级
方法绑定?
#返回菜单
menubarmap = tk.Menu(frameccu, tearoff=0)
#绑定返回方法
menubarmap.add_command(label='返回', command=lambda: method.updir(self=self))
#事件
def pop(event):
menubarmap.post(event.x_root, event.y_root)
#右键绑定事件
listbox.bind("<Button-3>", pop)
#绑定双击触发的方法
listbox.bind('<Double-Button-1>', method.tk_next_dir)
切换下级目录方法?
global dir
global r
#存放路径
dir = []
#设置初始路径
dir.append(file_path)
def tk_next_dir(self):
#dirselect 获取listbox双击选择的目录
dirselect = listbox.get(listbox.curselection())
#dir2 为拼接的下级路径
dir2 = dir[-1] + '/' + dirselect
#label显示拼接的下级路径
labelpath.config(text=dir2)
#判断是否为json文件
if 'json' in dirselect:
#开启下拉框
combobox.config(state='normal')
combobox.set('')
#预览json文件
cmd = 'cat %s ' % dir2
result = method.tk_Connect_service(cmd=cmd)
textview.delete(0.0, END)
#将输出转化为json格式
r = json.loads(result)
dict = []
for name in r:
dict.append(name)
#下拉框插入json key
combobox.config(values=dict)
#输出标准格式json
y = json.dumps(r, sort_keys=True, indent=4, separators=(',', ': '), ensure_ascii=False)
textview.insert(INSERT, y)
textview.see(END)
#如果双击的是yaml文件,直接预览,不做处理
elif 'yaml' in dirselect:
#处理yaml
combobox.config(state='disable')
cmd = 'cat %s ' % dir2
result = method.tk_Connect_service(cmd=cmd)
textview.delete(0.0, END)
textview.insert(INSERT, result)
textview.see(END)
#如果双击的是日志文件,直接预览,不做处理
elif '.log' in dirselect:
combobox.config(state='disable')
cmd = 'cat %s ' % dir2
result = method.tk_Connect_service(cmd=cmd)
textview.delete(0.0, END)
textview.insert(INSERT, result)
textview.see(END)
#其他情况
else:
combobox.config(state='disable')
dir.append(dir2)
listbox.delete(0, 'end')
cmd = 'ls %s ' % dir[-1]
result = method.tk_Connect_service(cmd=cmd)
i = ' '.join(result.split())
if i == '':
listbox.insert('end', '目录为空')
# print('目录为空时的dir---', dir)
else:
s = i.split(' ')
if s != ' ':
for k in s:
listbox.insert('end', k)
else:
listbox.insert('end', '没有查询到文件')
返回方法:将存放路径的dir字典中的最后元素删除
def updir(self):
listbox.delete(0, 'end')
del dir[-1]
#if len(dir) == 0:
if dir[-1] == '/home/ginger':
print('kong')
method.tk_Get_Mapdir(self=self)
else:
s2 = "| grep ginger_[maplog]"
cmd = 'ls %s ' % (dir[-1])
print(cmd)
result = method.tk_Connect_service(cmd=cmd)
i = ' '.join(result.split())
s = i.split(' ')
if s != '':
for k in s:
listbox.insert('end', k)
print('返回上一级后的dir', dir)
labelpath.config(text=dir[-1])
else:
listbox.insert('end', '没有查询到文件')
combobox选择需要查看的key
def serch(self):
p = labelpath.cget('text')
cmd = 'cat %s ' % p
result = method.tk_Connect_service(cmd=cmd)
r = json.loads(result)
k = combobox.get()
textview.delete(0.0, END)
d1 = r[k]
y = json.dumps(d1, sort_keys=True, indent=4, separators=(',', ': '), ensure_ascii=False)
textview.insert(INSERT, y)
textview.see(END)
?
|