<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)!