一、作业需求:
1, 运行程序列出主机组或者主机列表
2,选择指定主机或主机组
3,选择主机或主机组传送文件(上传/下载)
4,充分使用多线程或多进程
5,不同主机的用户名,密码,端口可以不同
6,可向主机或主机组批量发布命令
7,可一次性执行多条操作命令
二、
一、作业需求: 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线程或多进程(已完成) 5,不同主机的用户名,密码,端口可以不同(已完成) 6,可向主机或主机组批量发布命令(已完成) 7,可一次性执行多条操作命令(已完成) 二、博客地址:http://www.cnblogs.com/catepython/p/8872274.html 三、运行环境 操作系统:Win10 Python:3.6.4rcl Pycharm:2017.3.4 四、功能实现 1)实现所有基本需求 2)充分利用了面向对象式编程 五、测试 1)文件名为空判断 2)用户信息判断 3)指令格式化判断 4)上传/下载到指定路径判断 5)文件名/用户目录有效判断 六、备注
三、流程图
四、目录架构
五、核心代码
bin目录--程序开始
#-*-coding:utf-8 -*- # Author: D.Gray from core import main start = main.MyFabric() start.run()
conf目录
#-*-coding:utf-8 -*- # Author: D.Gray import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #print(BASE_DIR) HOST_NAME_PATH = os.path.join(BASE_DIR,'db') #print(HOST_NAME_PATH) HOME_PATH = os.path.join(BASE_DIR,'home')
core目录
#-*-coding:utf-8 -*- # Author: D.Gray import os,sys,paramiko,threading,time,json from conf import setting import re class MyFabric(object): def __init__(self): self.run = self.run() def run(self): ''' 主界面运行函数 :return: ''' text = """ 欢迎来到Fabric主机管理界面 1.创建主机 2.删除主机 3.自动激活所有主机 4.开始远程操控 5.退出程序 """ while True: print(text) choose = input("请输入您的选择>>>:").strip() #print(type(choose)) self.dic = { '1':self.new_host, #创建主机模块 '2':self.delect_host, #删除主机模块 '3':self.auto_host, #激活主机模块 '4':self.action_host, #控制主机模块 '5':self.exit } if choose in self.dic: self.dic[choose]() else: print("请输入有效操作") def new_host(self): ''' 创建主机模块函数 :return: ''' #print('in the new_host') db_path = setting.HOST_NAME_PATH while True: name = input('请输入登录名称(输入n=返回上级)>>>:').strip() name_path = os.path.join(db_path,'%s.json'%(name)) #print(name_path) if os.path.exists(name_path): print('登录名称已存在') continue if name == 'n': return hostname = input('请输入主机名(输入n=返回上级)>>>:').strip() if hostname == 'n': return port = input('请输入端口号(输入n=返回上级)>>>:').strip() if port.isdigit(): port = int(port) else: print('端口号必须是整数') return if port == 'n': return username = input('请输入用户名(输入n=返回上级)>>>:').strip() if username == 'n': return password = input('请输入密码(输入n=返回上级)>>>:').strip() if password == 'n': return newhost_dic = { "name":name, #用户文件名(主机链接名称) "hostname":hostname, "username":username, "port":port, "password":password, "status": 0, #0---未激活,1---已激活,2--激活失败 } mesag = '''