玖叶教程网

前端编程开发入门

「自动化」使用python登录linux系统并下载日志文件

需求:

测试工程师 提交bug时,需要附上日志文件,但linux系统(阉割版)没有直接取日志的功能,而且日志文件存在多个,手动搭建环境取日志费时费力,为了提高取日志的效率可使用python完成进行自动化取日志功能

代码:

import paramiko

class LogExport(object):
    def __init__(self,ip,username,password,local):
        self.ip = ip
        self.username = username
        self.password = password
        self.local = local

    def compress(self):
        ssh = paramiko.SSHClient() # 实例化SSH客户端
        policy = paramiko.AutoAddPolicy() # 创建默认的白名单
        ssh.set_missing_host_key_policy(policy) # 设置白名单
        ssh.connect(hostname=self.ip,port=22,username=self.username,password=self.password)
        i=0
        while i < 3:
            stdin,stdout,stderr = ssh.exec_command("tar -zcvf /test/log.tar.gz /test/log")
            print("日志压缩中,请等待。。。")
            #print(stdout.read().decode("utf-8")) #压缩结果展示
            stdin,stdout,stderr = ssh.exec_command("ls /test")
            result1 = str(stdout.read().decode())
            result2 = "log.tar.gz"

            if result2 in result1: #判端日志压缩包是否打包成功
                ssh.close()
                print("日志压缩完成,即将导出。。。")
                # return "success"
                self.export() #存在即导出
                break

            else:
                # return "false"
                i = i+1
                if i == 3:
                    print('日志压缩失败')

    def export(self):
        scp = paramiko.Transport((self.ip,22))
        scp.connect(username=self.username,password=self.password)
        sfcp = paramiko.SFTPClient.from_transport(scp)
        remote_path = "/test/log.tar.gz"  #导出原地址
        local_path = self.local
        sfcp.get(remote_path,local_path)
        scp.close()
        print("日志导出完成")
        self.delete()    #设备中删除压缩文件

    def delete(self):
        ssh = paramiko.SSHClient()
        policy = paramiko.AutoAddPolicy()
        ssh.set_missing_host_key_policy(policy)
        ssh.connect(hostname=self.ip,port=22,username=self.username,password=self.password)
        stdin,stdout,stderr = ssh.exec_command("ls /test")
        result3 = str(stdout.read().decode("utf-8"))
        result4 = "log.tar.gz"
        if result4 in result3:
            stdin,stdout,stderr = ssh.exec_command("rm -rf /test/log.tar.gz")
        else:
            print("日志压缩文件不存在")

if __name__ == "__main__":
    
    ip = "192.168.x.x"
    
    username = "ssh账号"
    
    password = "ssh密码"

    local = "D:\\Log\\log.tar.gz"   #导出目标地址
    
    start = LogExport(ip,username,password,local)
    
    start.compress()

    print ("日志导出地址:",local)

执行:

测试结果:

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言