qt+python的Linux服务器日志显示

使用qt实现主界面,python的paramiko实现连接服务器+显示日志文件更新命令,paramiko是ssh的python库,使用很方便,其实基于C++的ssh开发库也有很多,但是需要花费一些时间进行编译才能用,所有选择使用paramiko实现日志抓取功能,使用qt实现界面功能,使用QProcess进行python程序调用,本来要使用QProcess与python进程通信,但是只实现了单向的获取python输出,向python进程写内容失败,没有找到问题在哪,所以就改变了通信方式为socket,日志输出在python程序中使用socketserver,qt客户端连接到python服务器就可以接收到实时的日志更新,这种实现方式不是很好,但是让我最快的实现功能,每一部分代码都很简单,刚学习python,代码大部分网上复制的,算是记录一个练手的小程序。


import socketserver
import paramiko
import select
import sys
import os


class MyServer(socketserver.BaseRequestHandler):
    def handle(self):
        self.request.sendall(b"hello qt")
        try:
            client = paramiko.SSHClient()
            client.load_system_host_keys()
            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            client.connect('9.9.9.107', port=22,username='root', password='123456')
            transport = client.get_transport()
            channel = transport.open_session()
            channel.exec_command("tail -f /var/log/***.log")
        except:
            sys.stdout.write("python exit")
            sys.stdout.flush()
            os._exit(0)
        while True:
            try:
                rl, wl, xl = select.select([channel],[],[],0.0)
                if len(rl) > 0:
                    # Must be stdout
                    result = channel.recv(64)
                    if len(result) == 0:
                        break
                    try:
                        self.request.sendall(result)
                    except:
                        print("Connection Error")
                        client.get_transport().open_session().exec_command("kill -9 `ps -ef  | grep 'tail -f  /var/log/***.log' | grep -v grep | awk '{print $2}'`")
                        client.close()
                        sys.stdout.write("python exit")
                        sys.stdout.flush()
                        os._exit(0)
                        break
                        
                        


            except KeyboardInterrupt:
                print("Caught control-C")
                channel.close()
                try:
                    #open new socket and kill the proc..
                    client.get_transport().open_session().exec_command("kill -9 `ps -ef  | grep 'tail -f  /var/log/***.log' | grep -v grep | awk '{print $2}'`")
                    pass
                except:
                    pass


                client.get_transport().open_session().exec_command("kill -9 `ps -ef  | grep 'tail -f  /var/log/***.log' | grep -v grep | awk '{print $2}'`")
                client.close()
                exit(0)


                
if __name__ == '__main__':
    server = socketserver.ThreadingTCPServer(('127.0.0.1',1208),MyServer)
    server.serve_forever()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值