# 类 Fabric 主机管理程序开发:
# 1. 运行程序列出主机组或者主机列表
# 2. 选择指定主机或主机组
# 3. 选择让主机或者主机组执行命令或者向其传输文件(上传/下载)
# 4. 充分使用多线程或多进程
# 5. 不同主机的用户名密码、端口可以不同
import paramiko,threading,pickle,os Base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
config_path = Base_path +'/core/config'
#主机配置信息管理
list_host = [{'host':'192.168.117.236','port':22,'user':'ubuntu1','password':'ubuntu1','group':1},
{'host':'192.168.117.237','port':22,'user':'ubuntu2','password':'ubuntu2','group':1},
{'host':'192.168.117.239','port':22,'user':'ubuntu3','password':'ubuntu3','group':2},
{'host':'192.168.117.240','port':22,'user':'aaa','password':'bbb','group':2}]
def pickle_dump(path,file):
#存入配置文件
with open(path,'wb') as f:
pickle.dump(file,f)
#pickle_dump(config_path,list_host)
def pickle_load(path):
#取出配置文件
with open(path,'rb') as f:
list_host_new = pickle.load(f)
return list_host_new
# list_host_new = pickle_load(config_path)
# print(list_host_new) class Paramiko_sshd(object):
#sshd类
def __init__(self,host,port,user,password):
self.host = host
self.port = port
self.user = user
self.password = password def sshd_command(self,command):
#ssh远程主机执行命令,并返回结果
try:
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(self.host,self.port,self.user,self.password)
std_in,std_out,std_err = ssh_client.exec_command(command)
print(self.host.center(30,'*'))
print(command.upper().center(30,'='))
for line in std_out:
print(line.strip('\n'))
ssh_client.close()
except Exception as e:
print(e)
def sshd_upload_file(self,server_path,local_path):
#上传文件
try:
t = paramiko.Transport((self.host,self.port))
t.connect(username=self.user,password=self.password)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put(local_path,server_path)
t.close()
print(self.host.center(30, '*'))
print('上传成功')
except Exception as e:
print(e)
def sshd_down_file(self,server_path,local_path):
#下载文件
try:
t = paramiko.Transport((self.host, self.port))
t.connect(username=self.user, password=self.password)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.get(server_path, local_path)
t.close()
print(self.host.center(30, '*'))
print('下载成功')
except Exception as e:
print(e)
def help():
#帮助信息
command_option = input('''
*************请选择***********
1.执行命令
2.上传文件
3.下载文件
4.返回
5.退出程序
''').strip()
return command_option def review():
while 1:
#展示界面
list_host_new = pickle_load(config_path)
host_group_1 = []
host_group_2 = []
for line in list_host_new:
if line['group'] == 1:
host_group_1.append(line)
else:
host_group_2.append(line)
print('group-1'.center(30,'='))
for line_1 in host_group_1:
print('host:',line_1['host'],'port:',line_1['port'])
print('group-2'.center(30,'='))
for line_2 in host_group_2:
print('host:',line_2['host'],'port:',line_2['port']) group_select = input('请输入您要操作的主机组:\033[1;35m group-1 \033[0m | \033[1;35m group-2 \033[0m '
'或输入\033[1;35mexit\033[0m退出程序 ==>').strip()
if group_select in ['group-1','group-2']:
if group_select == 'group-1': #增加中间变量,来确定是对组一操作还是对组二进行操作
group_sure = host_group_1
else:
group_sure = host_group_2
while 1:
command_option = help()
if command_option == '':
command = input('请输入执行的命令:').strip()
for line_3 in group_sure:
sshd = Paramiko_sshd(line_3['host'],line_3['port'],line_3['user'],line_3['password'])
t = threading.Thread(target=sshd.sshd_command,args=(command,))
t.start()
t.join() elif command_option == '':
server_path = input('请输入上传到的服务器目录:').strip()
local_path = input('请输入本地文件目录:').strip()
for line_3 in group_sure:
sshd = Paramiko_sshd(line_3['host'],line_3['port'],line_3['user'],line_3['password'])
t = threading.Thread(target=sshd.sshd_upload_file,args=(server_path,local_path,))
t.start()
t.join() elif command_option == '':
server_path = input('请输入下载的服务器目录文件路径:').strip()
local_path = input('请输入存放到本地的路径:').strip()
for line_3 in group_sure:
sshd = Paramiko_sshd(line_3['host'],line_3['port'],line_3['user'],line_3['password'])
t = threading.Thread(target=sshd.sshd_down_file,args=(server_path,local_path,))
t.start()
t.join()
elif command_option == '':
break
elif command_option == '':
exit()
else:
print('%s为非法命令,请重新输入!'%command_option)
elif group_select == 'exit':
break
else:
print('%s为非法命令,请重新输入!'%group_select) if __name__ =='__main__':
review()

python 学习分享-实战篇类 Fabric 主机管理程序开发的更多相关文章

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

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

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

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

  3. 类 Fabric 主机管理程序开发

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

  4. python 学习分享-实战篇选课系统

    # 角色:学校.学员.课程.讲师 # 要求: # 1. 创建北京.上海 2 所学校 # 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 # ...

  5. python 学习分享-实战篇高级的ftp

    #server代码 import socketserver,os,hashlib Base_paht = os.path.dirname(os.path.dirname(os.path.abspath ...

  6. python 学习分享-实战篇简单的ftp

    import socket import os import time import pickle Basedb = os.path.dirname(os.path.dirname(os.path.a ...

  7. python 学习分享-实战篇增删改查作业

    一大波函数来袭 作业要求: 1本次作业通过空格及逗号,将文件拆分成列表,在通过判断add.del.update.select等关键字,来判断用户执行的是哪种命令,根据不同的命令调用不同的函数去处理. ...

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

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

  9. python 学习分享-函数篇

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这 ...

随机推荐

  1. .net core 2.0以上版本加载appsettings.json

    这里需要的一个关键类: Microsoft.Extensions.Configuration; 可以从nuget包获得 如果缺少该类,会造成无法实例化调用方法: ConfigurationBuilde ...

  2. vsftpd 启动 vsftpd:500 OOPS: bad bool value in config file for: guest_enable

    不然启动时会涌现毛病,举个例子 guest_enable=YES  后面出现空格,就会出现 为 vsftpd 启动 vsftpd:500 OOPS: bad bool value in config ...

  3. VMware 12安装Mac OS X 10.11

    去年写了一篇安装Mac OS X 10.10的文章,看到大家都想体验OS X,大多数都能成功,但也在其中发现了一些问题,所以更新一下,希望对大家有所帮助.   1048VMware 11安装Mac O ...

  4. 用蒙特卡洛方法计算派-python和R语言

    用蒙特卡洛方法算pi-基于python和R语言 最近follow了MOOC上一门python课,开始学Python.同时,买来了概率论与数理统计,准备自学一下统计.(因为被鄙视过不是统计专业却想搞数据 ...

  5. 基于SOA架构和流媒体技术的在线教育平台的研究

    简介 现代远程教育是指通过音频.视频(直播或录像)以及包括实时和非实时在内的计算机技术把课程传送的教育.现代远程教育是随着现代信息技术的发展而产生的一种新型教育方式.计算机技术.多媒体技术.通信技术的 ...

  6. BootStrap中常用样式类

    网格选项 row:行 col--:列(第一个可以为xs[超小]/sm[小型]/md[中型]/lg[大型]:第二个必须为12以内的[列数]) col--offset-:列偏移(第一个同上,第二个范围为1 ...

  7. pycharm界面美化,个人喜欢

    进入file-setting选项 界面设置主要是在appearance和editor里面.appearance主要是整个pycharm的主题设置,比如文件管理窗口的颜色,其实就是软件本身的主题设置.我 ...

  8. Python3.6+pyinstaller+Django

    方案(一)Python3.6+pyinstaller+windows服务 一.Python3.6(64位)环境清单 Django==1.11.7 django-windows-tools==0.2 P ...

  9. C语言进阶—— 接续符和转义符13

    接续符的意义: C语言中的接续符 (\) 是指示编译器行为的利器 我们来看一个案例: #in\ clud\ e <st\ dio.h> in\ t m\ ain(\ ) { pri\ nt ...

  10. 理解JAVA与C的运行机制

    1.java的运行机制 java的编译过程,将java的源程序(扩展名为.java的文件),由java编译程序将java的字节码文件(.class文件)在jvm上运行,机器码有cpu运行, jvm编译 ...