#coding: utf-8

importparamikoimportreimportosfrom time importsleep#定义一个类,表示一台远端linux主机#参考https://www.cnblogs.com/haigege/p/5517422.html wyc

classLinux(object):#通过IP, 用户名,密码,超时时间初始化一个远程Linux主机

def __init__(self, ip, username, password, timeout=3000):

self.ip=ip

self.username=username

self.password=password

self.timeout=timeout#transport和chanel

self.t = ''self.chan= ''

#链接失败的重试次数

self.try_times = 3

#调用该方法连接远程主机

defconnect(self):whileTrue:#连接过程中可能会抛出异常,比如网络不通、链接超时

try:

self.t= paramiko.Transport(sock=(self.ip, 22))

self.t.connect(username=self.username, password=self.password)

self.chan=self.t.open_session()

self.chan.settimeout(self.timeout)

self.chan.get_pty()

self.chan.invoke_shell()#如果没有抛出异常说明连接成功,直接返回

print (u'连接%s成功' %self.ip)#接收到的网络数据解码为str

print (self.chan.recv(65535).decode('utf-8'))return

#这里不对可能的异常如socket.error, socket.timeout细化,直接一网打尽

exceptException as e1:if self.try_times !=0:print (u'连接%s失败,进行重试' %self.ip)

self.try_times-= 1

else:print (u'重试3次失败,结束程序')

exit(1)#断开连接

defclose(self):

self.chan.close()

self.t.close()#发送要执行的命令

defsend(self, cmd):

cmd+= '\r'

#通过命令执行提示符来判断命令是否执行完成

p = re.compile(r':~ #')

result= ''

#发送要执行的命令

self.chan.send(cmd)#回显很长的命令可能执行较久,通过循环分批次取回回显

whileTrue:

sleep(0.5)

ret= self.chan.recv(65535)

ret= ret.decode('utf-8')

result+=retifp.search(ret):print(result)returnresult#------获取本地指定目录及其子目录下的所有文件------

def __get_all_files_in_local_dir(self, local_dir):#保存所有文件的列表

all_files =list()#获取当前指定目录下的所有目录及文件,包含属性值

files =os.listdir(local_dir)for x infiles:#local_dir目录中每一个文件或目录的完整路径

filename =os.path.join(local_dir, x)#如果是目录,则递归处理该目录

ifos.path.isdir(x):

all_files.extend(self.__get_all_files_in_local_dir(filename))else:

all_files.append(filename)returnall_filesdefsftp_put_dir(self, local_dir, remote_dir):

t= paramiko.Transport(sock=(self.ip, 22))

t.connect(username=self.username, password=self.password)

sftp=paramiko.SFTPClient.from_transport(t)#去掉路径字符穿最后的字符'/',如果有的话

if remote_dir[-1] == '/':

remote_dir= remote_dir[0:-1]#获取本地指定目录及其子目录下的所有文件

all_files = self.__get_all_files_in_local_dir(local_dir)#依次put每一个文件

for x inall_files:

filename= os.path.split(x)[-1]

remote_filename= remote_dir + '/' +filenameprint(x)print(remote_filename)print (u'Put文件%s传输到%s中...' %(filename,self.ip))

sftp.put(x, remote_filename)if __name__ == '__main__':#host = Linux('172.16.10.40', 'root', 'imlytek!40')

#host.connect()

#host.send('ls -l')

remote_path = r'/imlytek/smpt'local_path= r'D:\TSTP'

#host.sftp_put_dir(local_path, remote_path)

hostArray=[['172.16.10.40','root','iflstek!40'],['172.16.10.51','root','x1f@2013']]for x inhostArray:

host= Linux(x[0], x[1], x[2])

host.sftp_put_dir(local_path, remote_path)#host.close()

python服务器消息分发_Python实现分发数据块到多台服务器上相关推荐

  1. 一台服务器可以架设几个不同的版本?一台服务器可以架设几个微端?

    一台服务器可以架设几个不同的版本?一台服务器可以架设几个微端? 关于一台服务器可以架设几个版本,可以开几个微端是经常会遇到的问题了,今天小荞就来和你们说说 首先服务器能架设几个版本和服务器的配置.自身 ...

  2. 服务器 消息 208,在MSSQL2000里边 对象名 'sys.servers' 无效 服务器: 消息 208,级别 16,状态 1,行 1...

    在MSSQL2000里面 对象名 'sys.servers' 无效 服务器: 消息 208,级别 16,状态 1,行 1 在MSSQL2000里面不支持该  sys.servers查看链接服务器信息 ...

  3. python (语音)信号拆分为数据块,计算短期能量和过零率

    学习目标(ILO): 您应该 了解如何将(语音)信号拆分为数据块(帧)并在这些块上进行分析/转换 计算短期能量和过零率并将它们可视化以区分浊音和清音语音部分 了解相关性的基础知识并能够实现相关性估计器 ...

  4. 服务器虚拟化和网络虚拟化关系,数据中心网络如何应对服务器虚拟化?

    文/王宏伟 根据Gartner调查显示,2009年有18%的28%,到2012年将接近50%.由于服务器虚拟化的广泛应用和优势明显,虚拟化技术因而也迅速得到了扩散,存储虚拟化.网络虚拟化--,虚拟化技 ...

  5. 服务器放在机柜_一个标准服务器机柜能放多少台服务器

    经常有客户询问我们42U标准服务器机柜尺寸是多少?42U机柜尺寸多少?这些一直都是有机柜租用需求的用户比较关心和关注的问题,今天小编就给大家解答一下. 机柜有很多种,有网络机柜.服务器机柜.控制台机柜 ...

  6. python redis 消息队列_Python的Flask框架应用调用Redis队列数据的方法

    任务异步化打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器,服务器处理请求,返回响应(response)内容. 我们每天都在浏览网页,发送大大小 ...

  7. python nonetype报错_python 查询数据库数据 NoneType报错

    python调试mysql数据库时,在测试单条查询语句的时候是没有问题的. 执行过程如下: 1.由连接对象conn获取到一个cursor. cur = conn.cursor() 2.执行sql语句. ...

  8. python微信消息定时_python微信定时消息

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 使用supervisor的具体方法,在我这篇文章中有讲过:https:www.z ...

  9. python redis 消息队列_python中利用redis构建任务队列(queue)

    Python中的使用标准queue模块就可以建立多进程使用的队列,但是使用redis和redis-queue(rq)模块使这一操作更加简单. Part 1. 比如首先我们使用队列来简单的储存数据:我们 ...

最新文章

  1. JavaScript单行代码
  2. Java反射机制的适用场景及其利与弊 ***
  3. Android之Eclipse下面如何看Android源代码
  4. 自动控制原理第二版王建辉_王建辉自动控制原理配套题库名校考研真题课后答案资料课后习题章节题库模拟试题...
  5. Git笔记(24) 维护项目
  6. 试验thrift做后端rpc,nginx做web服务器, python后端php前端
  7. python删除数据框中的字符串列_如何根据条件删除pandas数据框中的列?
  8. c语言oj平台作业,OJ平台C语言习题答案.pdf
  9. C语言全局变量和局部变量
  10. 用python做youtube自动化下载器 思路
  11. 坎德拉、流明、勒克斯之间的关系
  12. python cv2截取不规则区域图片
  13. FastqC结果简介
  14. 题解HDU6148 Valley Numer(数位DP+深搜DFS)
  15. hive谓词与cbo的一些奇葩事
  16. nvd、nvm索引文件的生成
  17. 微信商户平台登录重复下载安装安全控件解决办法
  18. 阿里云盘上线了,使用中,1T空间,不限速(似乎)!
  19. mysql数据库使用一条insert语句同时插入多条数据
  20. linux下安装basler相机pylon软件

热门文章

  1. 笑抽了!这个程序员正在坐电梯,被HR逮到偷偷出去面试!
  2. 腾讯音乐:全民K歌推荐系统架构及粗排设计
  3. 从面试角度一文学完 Kafka
  4. 分享13个Spring Boot 优质开源项目!商城,ERP,管理系统
  5. 国产研发管理工具也在慢慢壮大,Worktile7岁了!
  6. 谈谈SaaS创业和企业服务的常识
  7. Scrum团队选择scrum看板工具的7点特征
  8. Leangoo如何颠覆传统项目管理软件?
  9. 批处理-批量拉取git代码
  10. HTML5本地存储localStorage,sessionStorage