• [Python]处理windows下多级目录文件,上传到Linux服务器


    #-*- coding: utf-8 -*-
    __author__ = 'tsbc'
    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    import paramiko
    import os
    import time
    class Upload():
        """
        上传每天生成的测试报告到Linux的web服务器。 paramiko 包需要安装
        /result/  下存放html文件
        /result/image  截图文件
        """
        username = "root"
        password = "******"
        hostname = "192.168.200.8"
        localdir = "..\result\"
        romotedir = "/opt/lampp/htdocs/result/"
        port = 22
        #日期格式 2014-12-17
        day = time.strftime('%Y-%m-%d', time.localtime(time.time()))
        #获取当前时间格式 2014-12-12-10_39_58
        now = time.strftime('%Y-%m-%d-%H_%M_%S', time.localtime(time.time()))
        #定义shell创建目录命令:判断路径是否存,
        mkdir_day = "[ -d "" + romotedir + day + "" ] || mkdir " + romotedir + day + "; "
        mkdir_img = "[ -d "" + romotedir + day + "/image" ] || mkdir " + romotedir + day + "/image"
        # print mkdir_day
        # print mkdir_img
        """
        SSH远程登录Linux主机
        """
        #调用ssh客户端接口,进行登录
        s = paramiko.SSHClient()
        #s.load_system_host_keys()
        s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        s.connect(hostname=hostname, username=username, password=password)
        #使用Linux标准的输入、输出、报错,调用定义好的shell命令进行创建目录
        stdin,stdout,stderr=s.exec_command(mkdir_day + mkdir_img)
        #输出命令反馈
        print stdout.read()
        #关闭连接
        s.close()
        """
        os.walk()输出为:
        ([路径],[目录],[文件])
        ('..\result\2014-12-18', ['image'], ['2014-12-18-10_42_43_result.html'])
        ('..\result\2014-12-18\image', [], ['2014-12-18-11_28_33_login.png', '2014-12-18-11_28_36_login.png'])
        """
        path = localdir + day
        if os.path.exists(path):
            nested = os.walk(path)
            for i in nested:
                print i
                tt = i[1]   #i[0] 是路径; i[1] 目录名称列表; i[2] 是文件列表
                if len(tt) > 0:  #当tt>0时,说明是根目录(入口目录)下,tt<0时,说明当前是叶子目录
                    print u" = +当前目录 " + str(i[0]) + u" 下的文件有:"
                    ff = i[0].split('\')#使用进行路径分割
                    ddir = ff[len(ff)-1]#获取末尾的文件目录名称
                    for j in i[2]:
                        localn = localdir + ddir + "\" + j
                        romoten = romotedir + ddir + "/" + j
                        print j
                        # print localn
                        # print romoten
                        try:
                            #通过主机名、端口、用户名和密码连接远程主机。
                            t = paramiko.Transport(hostname, port)
                            t.connect(username=username, password=password)
                            sftp =paramiko.SFTPClient.from_transport(t)
                            #sftp的put表示把本地文件传送到远程机器上,get表示把远程文件传递到本地机器上。
                            sftp.put(localn, romoten)
                            #关闭连接
                            t.close()
                        except Exception, e:
                            import traceback
                            traceback.print_exc()
                            try:
                                t.close()
                            except:
                                pass
                elif len(tt) < 1:
                    print u" = +当前目录 " + str(i[0]) + u" 下的文件有:"
                    ff = i[0].split('\')#使用进行路径分割
                    fdir = ff[len(ff)-1]#获取末尾的文件目录名称
                    for j in i[2]:
                        localn = str(i[0]) + "\" + j #str(i[0]) == localdir + fdir
                        romoten = "/opt/lampp/htdocs/result/" + day +"/"+ fdir + "/" + j
                        print j
                        # print localn
                        # print romoten
                        #stdin,stdout,stderr=s.exec_command("mkdir /opt/lampp/htdocs/result/"+fdir)
                        try:
                            t = paramiko.Transport(hostname, port)
                            t.connect(username=username, password=password)
                            sftp =paramiko.SFTPClient.from_transport(t)
                            #sftp的put表示把本地文件传送到远程机器上,get表示把远程文件传递到本地机器上。
                            sftp.put(localn, romoten)
                            t.close()
                        except Exception, e:
                            import traceback
                            traceback.print_exc()
                            try:
                                t.close()
                            except:
                                pass
        else:
            print path+" 目录不存在,报告未能成功上传!"
    if __name__ == "__main__":
        Upload()
  • 相关阅读:
    C# Split() 去除 分组
    C#获取当前路径的7种方法
    给 C# 开发者的代码审查清单
    【知乎】一句话答案收录集,一句足矣
    C# string和byte[]的转换
    WCF 有零个操作;协定必须至少有一个操作
    WPF中动态改变控件显示位置
    转 将iPhone和Android手机屏幕投影仪投影显示
    转 MySQL数据库监控软件lepus使用问题以及解决办法
    转 Shell中的IFS解惑
  • 原文地址:https://www.cnblogs.com/tsbc/p/4175196.html
Copyright © 2020-2023  润新知