类 Fabric 主机管理程序开发:
1. 运行程序列出主机组或者主机列表
2. 选择指定主机或主机组
3. 选择让主机或者主机组执行命令或者向其传输文件(上传/下载
4. 充分使用多线程或多进程
5. 不同主机的用户名密码、端口可以不同

代码如下:

#-*-coding:utf-8-*-

import threading
import queue,time,os,paramiko #服务器连接信息获取验证
def auth_action():
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
try:
db_handle = BASE_DIR+"/db/host.json"
except Exception as a:
print ("The user is not exist! ",a)
print (db_handle)
f = open(db_handle)
for host_info in f:
q.put(host_info)
#print (q.qsize())
#获取执行命令返回信息;
def get_info(hostname,port,username,password,command):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh.connect(hostname,port,username,password)
# 执行命令;
stdin, stdout, stderr = ssh.exec_command(command)
result = stdout.read()
print("*************", hostname,"*************")
print(result.decode())
ssh.close()
#上传文件操作;
def put_file(hostname,port,username,password):
transport = paramiko.Transport((hostname,int(port)))
print (hostname,port)
transport.connect(username = username, password=password) sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put('oldboy.avi','/home/oracle/test_from_win')
sftp.close()
#获取主机列表
def get_host_info():
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
try:
db_handle = BASE_DIR+"/db/host.json"
except Exception as a:
print ("The user is not exist! ",a)
#print (db_handle)
with open (db_handle) as f:
print (f.read()) if __name__ =="__main__":
q = queue.Queue()
msg ="""
1.显示主机列表;
2.主机组执行命令;
3.向主机传输文件;
"""
while True:
print (msg)
msg_info = input("请选择要执行的操作:")
if msg_info =="1":
get_host_info()
if msg_info=="2":
print (">>>>>")
command = input("请输入执行命令!>>>")
auth_action()
#print (q.qsize())
tmp_list = []
for _ in range(q.qsize()):
host_list = q.get().split()
hostname, port, username, password = host_list[1], host_list[4], host_list[2], host_list[3]
t = threading.Thread(target=get_info, args=((hostname, port, username, password, command)))
tmp_list.append(t)
t.start()
for t in tmp_list:
t.join()
if msg_info =="3":
time_start = time.time()
#put_file(hostname, port, username, password)
auth_action()
tmp_list = []
for _ in range(q.qsize()):
host_list = q.get().split()
hostname, port, username, password = host_list[1], host_list[4], host_list[2], host_list[3]
t = threading.Thread(target=put_file, args=((hostname, port, username, password)))
tmp_list.append(t)
t.start()
for t in tmp_list:
t.join()
cost_time = time.time() - time_start
print ("上传文件已完成,用时:%s" % cost_time)
if msg_info =="q":
print ("退出系统!")
break

类 Fabric 主机管理程序开发的更多相关文章

  1. python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)

    类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...

  2. python作业类Fabric主机管理程序开发(第九周)

    作业需求: 1. 运行程序列出主机组或者主机列表 2. 选择指定主机或主机组 3. 选择让主机或者主机组执行命令或者向其传输文件(上传/下载) 4. 充分使用多线程或多进程 5. 不同主机的用户名密码 ...

  3. python 学习分享-实战篇类 Fabric 主机管理程序开发

    # 类 Fabric 主机管理程序开发: # 1. 运行程序列出主机组或者主机列表 # 2. 选择指定主机或主机组 # 3. 选择让主机或者主机组执行命令或者向其传输文件(上传/下载) # 4. 充分 ...

  4. python第五十二天---第九周作业 类 Fabric 主机管理程序

    类 Fabric 主机管理程序开发:1. 运行程序列出主机组或者主机列表2. 选择指定主机或主机组3. 选择让主机或者主机组执行命令或者向其传输文件(上传/下载)4. 充分使用多线程或多进程5. 不同 ...

  5. paramiko类Fabric主机管理

    环境:Linux python3.5 要求:类 Fabric 主机管理程序开发:1. 运行程序列出主机组或者主机列表2. 选择指定主机或主机组3. 选择让主机或者主机组执行命令或者向其传输文件(上传/ ...

  6. 基于MDK的ARM-GCC开发环境建立及新唐M0的HID类设备的C++开发

    一,下载安装测试arm-none-eabi-gcc编译工具链 1,查看arm-none-eabi-gcc编译工具版本        打开网页:https://sourcery.mentor.com/G ...

  7. 可视化设计,类Excel的快速开发平台

    活字格Web应用生成器,是可视化设计,类Excel的快速开发平台,接下来给大家介绍如何体现这些特点. 一.可视化设计 网页系统的开发,包含UI设计+代码编写的工作,最终形成网页系统.这要求系统开发人员 ...

  8. 主机 & 虚拟机 & 开发板 三者的恩爱情仇

    # 主机 & 虚拟机 & 开发板 > 三者网络连通性,使用ping命令检测 @ Bridge 模式 ## 主机 & 虚拟机 主机与虚拟机相当于一个网络里的两台主机,都有各 ...

  9. 老男孩Day10作业:主机管理程序

    一.作业需求: 1, 运行程序列出主机组或者主机列表 2,选择指定主机或主机组 3,选择主机或主机组传送文件(上传/下载) 4,充分使用多线程或多进程 5,不同主机的用户名,密码,端口可以不同 6,可 ...

随机推荐

  1. 【poj 1724】 ROADS 最短路(dijkstra+优先队列)

    ROADS Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12436 Accepted: 4591 Description N ...

  2. 自己制作Android包括@hide接口的SDK

    Android系统存在一些系统级应用与framework代码耦合较深,编译的时候依赖非常多类里面的@hide接口.这类应用怎么来编译呢?首先我们须要制作一份包括Hide接口的SDK,方法例如以下(以a ...

  3. tiny4412学习(一)之从零搭建linux系统(烧写uboot、内核进emmc+uboot启动内核)【转】

    本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/74080109 版权声明:本文为博主原创文章,转载请注明http://blog.c ...

  4. XHR ajax

    谷歌搜索xhr site:cnblogs.com https://www.cnblogs.com/xiaohuochai/p/6036475.html 在Chrome的network监视中,类型为XH ...

  5. win7下远程登录ubuntu mysql

    网络上找了很久的一个办法,不然老是远程访问不了linux mysql. 原先一直用root登录,进不了,新建一个root1倒是可以了. 安装好mysql后,按以下步骤: 1.将vim /etc/mys ...

  6. bzoj3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛——递推 / 组合数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3398 对于这种有点巧妙的递推还是总是没有思路... 设计一个状态 f[i] 表示第 i 位置 ...

  7. javascript的鼠标事件---基础

  8. native2ascii运用

    1.native2ascii命令行的格式 native2ascii -[option] [inputfile [outputfile]] 说明: -[option]:表示命令开关,有两个选项可供选择: ...

  9. [App Store Connect帮助]一、 App Store Connect 使用入门(3)首页概述

    从首页可以访问 App Store Connect 的各个部分.您仅能访问每个部分中与您的用户职能相关联的功能. [提示]通过点按任何页面顶部的“App Store Connect”,您可以随时返回 ...

  10. oracle 误删数据

    insert into hr.job_history select * from hr.job_history as of timestamp to_timestamp('2007-07-23 10: ...