当前位置:首页 > 操作系统 > Windows

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

            <span>#</span>
            <span>-*- coding: utf-8 -*-</span>
            <span>__author__</span> = <span>‘</span><span>tsbc</span><span>‘</span><span>import</span><span> sys
reload(sys)
sys.setdefaultencoding(</span><span>‘</span><span>utf-8</span><span>‘</span><span>)
</span><span>import</span><span> paramiko
</span><span>import</span><span> os
</span><span>import</span><span> time
</span><span>class</span><span> Upload():
    </span><span>"""</span><span>
    上传每天生成的测试报告到Linux的web服务器。 paramiko 包需要安装
    /result/  下存放html文件
    /result/image  截图文件
    </span><span>"""</span><span>
    username </span>= <span>"</span><span>root</span><span>"</span><span>
    password </span>= <span>"</span><span>******</span><span>"</span><span>
    hostname </span>= <span>"</span><span>192.168.200.8</span><span>"</span><span>
    localdir </span>= <span>"</span><span>..result</span><span>"</span><span>
    romotedir </span>= <span>"</span><span>/opt/lampp/htdocs/result/</span><span>"</span><span>
    port </span>= 22
    <span>#</span><span>日期格式 2014-12-17</span>
    day = time.strftime(<span>‘</span><span>%Y-%m-%d</span><span>‘</span><span>, time.localtime(time.time()))
    </span><span>#</span><span>获取当前时间格式 2014-12-12-10_39_58</span>
    now = time.strftime(<span>‘</span><span>%Y-%m-%d-%H_%M_%S</span><span>‘</span><span>, time.localtime(time.time()))
    </span><span>#</span><span>定义shell创建目录命令:判断路径是否存,</span>
    mkdir_day = <span>"</span><span>[ -d "</span><span>"</span> + romotedir + day + <span>"</span><span>" ] || mkdir </span><span>"</span> + romotedir + day + <span>"</span><span>; </span><span>"</span><span>
    mkdir_img </span>= <span>"</span><span>[ -d "</span><span>"</span> + romotedir + day + <span>"</span><span>/image" ] || mkdir </span><span>"</span> + romotedir + day + <span>"</span><span>/image</span><span>"</span><span>#</span><span> print mkdir_day</span><span>#</span><span> print mkdir_img</span><span>"""</span><span>
    SSH远程登录Linux主机
    </span><span>"""</span><span>#</span><span>调用ssh客户端接口,进行登录</span>
    s =<span> paramiko.SSHClient()
    </span><span>#</span><span>s.load_system_host_keys()</span><span>    s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    s.connect(hostname</span>=hostname, username=username, password=<span>password)
    </span><span>#</span><span>使用Linux标准的输入、输出、报错,调用定义好的shell命令进行创建目录</span>
    stdin,stdout,stderr=s.exec_command(mkdir_day +<span> mkdir_img)
    </span><span>#</span><span>输出命令反馈</span><span>print</span><span> stdout.read()
    </span><span>#</span><span>关闭连接</span><span>    s.close()
    </span><span>"""</span><span>
    os.walk()输出为:
    ([路径],[目录],[文件])
    (‘..result2014-12-18‘, [‘image‘], [‘2014-12-18-10_42_43_result.html‘])
    (‘..result2014-12-18image‘, [], [‘2014-12-18-11_28_33_login.png‘, ‘2014-12-18-11_28_36_login.png‘])
    </span><span>"""</span><span>
    path </span>= localdir +<span> day
    </span><span>if</span><span> os.path.exists(path):
        nested </span>=<span> os.walk(path)
        </span><span>for</span> i <span>in</span><span> nested:
            </span><span>print</span><span> i
            tt </span>= i[1]   <span>#</span><span>i[0] 是路径; i[1] 目录名称列表; i[2] 是文件列表</span><span>if</span> len(tt) > 0:  <span>#</span><span>当tt>0时,说明是根目录(入口目录)下,tt<0时,说明当前是叶子目录</span><span>print</span> u<span>"</span><span> = +当前目录 </span><span>"</span> + str(i[0]) + u<span>"</span><span> 下的文件有:</span><span>"</span><span>
                ff </span>= i[0].split(<span>‘</span><span></span><span>‘</span>)<span>#</span><span>使用进行路径分割</span>
                ddir = ff[len(ff)-1]<span>#</span><span>获取末尾的文件目录名称</span><span>for</span> j <span>in</span> i[2<span>]:
                    localn </span>= localdir + ddir + <span>"</span><span></span><span>"</span> +<span> j
                    romoten </span>= romotedir + ddir + <span>"</span><span>/</span><span>"</span> +<span> j
                    </span><span>print</span><span> j
                    </span><span>#</span><span> print localn</span><span>#</span><span> print romoten</span><span>try</span><span>:
                        </span><span>#</span><span>通过主机名、端口、用户名和密码连接远程主机。</span>
                        t =<span> paramiko.Transport(hostname, port)
                        t.connect(username</span>=username, password=<span>password)
                        sftp </span>=<span>paramiko.SFTPClient.from_transport(t)
                        </span><span>#</span><span>sftp的put表示把本地文件传送到远程机器上,get表示把远程文件传递到本地机器上。</span><span>                        sftp.put(localn, romoten)
                        </span><span>#</span><span>关闭连接</span><span>                        t.close()
                    </span><span>except</span><span> Exception, e:
                        </span><span>import</span><span> traceback
                        traceback.print_exc()
                        </span><span>try</span><span>:
                            t.close()
                        </span><span>except</span><span>:
                            </span><span>pass</span><span>elif</span> len(tt) < 1<span>:
                </span><span>print</span> u<span>"</span><span> = +当前目录 </span><span>"</span> + str(i[0]) + u<span>"</span><span> 下的文件有:</span><span>"</span><span>
                ff </span>= i[0].split(<span>‘</span><span></span><span>‘</span>)<span>#</span><span>使用进行路径分割</span>
                fdir = ff[len(ff)-1]<span>#</span><span>获取末尾的文件目录名称</span><span>for</span> j <span>in</span> i[2<span>]:
                    localn </span>= str(i[0]) + <span>"</span><span></span><span>"</span> + j <span>#</span><span>str(i[0]) == localdir + fdir</span>
                    romoten = <span>"</span><span>/opt/lampp/htdocs/result/</span><span>"</span> + day +<span>"</span><span>/</span><span>"</span>+ fdir + <span>"</span><span>/</span><span>"</span> +<span> j
                    </span><span>print</span><span> j
                    </span><span>#</span><span> print localn</span><span>#</span><span> print romoten</span><span>#</span><span>stdin,stdout,stderr=s.exec_command("mkdir /opt/lampp/htdocs/result/"+fdir)</span><span>try</span><span>:
                        t </span>=<span> paramiko.Transport(hostname, port)
                        t.connect(username</span>=username, password=<span>password)
                        sftp </span>=<span>paramiko.SFTPClient.from_transport(t)
                        </span><span>#</span><span>sftp的put表示把本地文件传送到远程机器上,get表示把远程文件传递到本地机器上。</span><span>                        sftp.put(localn, romoten)
                        t.close()
                    </span><span>except</span><span> Exception, e:
                        </span><span>import</span><span> traceback
                        traceback.print_exc()
                        </span><span>try</span><span>:
                            t.close()
                        </span><span>except</span><span>:
                            </span><span>pass</span><span>else</span><span>:
        </span><span>print</span> path+<span>"</span><span> 目录不存在,报告未能成功上传!</span><span>"</span><span>if</span><span>__name__</span> == <span>"</span><span>__main__</span><span>"</span><span>:
    Upload()</span>

 

原文:http://www.cnblogs.com/tsbc/p/4175196.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐