当前位置: 首页 > news >正文

外国网站怎么进入天津网页制作培训班

外国网站怎么进入,天津网页制作培训班,2022年河北二建考试最新消息,网站右侧二维码代码自动化巡检的需求 巡检工作通常包含大量的重复性操作,而这些重复性特征意味着其背后存在明确的规则和逻辑。这种规律性为实现自动化提供了理想的前提条件。 自动化工具 我们这里采用python作为自动化的执行工具。 过程 安装 netmiko pip install netmiko 模块的使…

自动化巡检的需求

        巡检工作通常包含大量的重复性操作,而这些重复性特征意味着其背后存在明确的规则和逻辑。这种规律性为实现自动化提供了理想的前提条件。

自动化工具

        我们这里采用python作为自动化的执行工具。

过程

        安装 netmiko

pip install netmiko

        模块的使用

import os
from concurrent.futures import ThreadPoolExecutor
from os import makedirs
from netmiko import ConnectHandler
import csv
import chardet

        厂商识别与协议识别

    if i['厂商'] == '华为' and i['协议'] == 'ssh':device_type = 'huawei'cmd_txt = '华为巡检命令.txt'elif i['厂商'] == '华为' and i['协议'] == 'telnet':device_type = 'huawei_telnet'cmd_txt = '华为巡检命令.txt'elif i['厂商'] == '华三' and i['协议'] == 'ssh':device_type = 'hp_comware'cmd_txt = 'H3C巡检命令.txt'elif i['厂商'] == '华三' and i['协议'] == 'telnet':device_type = 'hp_comware_telnet'cmd_txt = 'H3C巡检命令.txt'elif i['厂商'] == '锐捷' and i['协议'] == 'ssh':device_type = 'ruijie_os'cmd_txt = '锐捷巡检命令.txt'elif i['厂商'] == '锐捷' and i['协议'] == 'telnet':device_type = 'ruijie_os_telnet'cmd_txt = '锐捷巡检命令.txt'

        创建设备字典

device = {'device_type': device_type,'host': i['ip'],'username': i['username'],'password': i['password'],}

        调用构造函数并传参,**表示将字典解包并逐一传参

conn = ConnectHandler(**device)

        巡检记录之path变量为True

dir = os.path.join('./巡检命令文件/', cmd_txt)path = './巡检记录/'if os.path.exists(path): #表示如果path变量中存储的路径存在则运行with open(dir, mode='rb') as ffile: #这段open是为了识别字符集编码data_bs = ffile.read()result_dict = chardet.detect(data_bs)encoding_cmd_txt = result_dict['encoding']with open(dir, mode='r', encoding=encoding_cmd_txt) as cmd_read:for cmd in cmd_read:stdout = conn.send_command(cmd.strip())with open(f'{path}{i['ip']}的巡检记录.txt', mode='a', encoding='utf-8') as addwrite:addwrite.write(stdout)

        巡检记录之path变量为false

    else:makedirs(path)  #因为path变量中存储的路径不存在,因此创建一个with open(dir, mode='rb') as ffile:data_bs = ffile.read()result_dict = chardet.detect(data_bs)encoding_cmd_txt = result_dict['encoding']with open(dir, mode='r', encoding=encoding_cmd_txt) as cmd_read:for cmd in cmd_read:stdout = conn.send_command(cmd.strip())with open(f'{path}{i['ip']}的巡检记录.txt', mode='a', encoding='utf-8') as addwrite:addwrite.write(stdout)

        并且以上所有代码细节都封装进一个函数里以方便代码的抽象化引用和减少代码的重复性。

def xijie(i):if i['厂商'] == '华为' and i['协议'] == 'ssh':device_type = 'huawei'cmd_txt = '华为巡检命令.txt'elif i['厂商'] == '华为' and i['协议'] == 'telnet':device_type = 'huawei_telnet'cmd_txt = '华为巡检命令.txt'elif i['厂商'] == '华三' and i['协议'] == 'ssh':device_type = 'hp_comware'cmd_txt = 'H3C巡检命令.txt'elif i['厂商'] == '华三' and i['协议'] == 'telnet':device_type = 'hp_comware_telnet'cmd_txt = 'H3C巡检命令.txt'elif i['厂商'] == '锐捷' and i['协议'] == 'ssh':device_type = 'ruijie_os'cmd_txt = '锐捷巡检命令.txt'elif i['厂商'] == '锐捷' and i['协议'] == 'telnet':device_type = 'ruijie_os_telnet'cmd_txt = '锐捷巡检命令.txt'device = {'device_type': device_type,'host': i['ip'],'username': i['username'],'password': i['password'],}conn = ConnectHandler(**device)dir = os.path.join('./巡检命令文件/', cmd_txt)path = './巡检记录/'if os.path.exists(path):with open(dir, mode='rb') as ffile:data_bs = ffile.read()result_dict = chardet.detect(data_bs)encoding_cmd_txt = result_dict['encoding']with open(dir, mode='r', encoding=encoding_cmd_txt) as cmd_read:for cmd in cmd_read:stdout = conn.send_command(cmd.strip())with open(f'{path}{i['ip']}的巡检记录.txt', mode='a', encoding='utf-8') as addwrite:addwrite.write(stdout)else:makedirs(path)with open(dir, mode='rb') as ffile:data_bs = ffile.read()result_dict = chardet.detect(data_bs)encoding_cmd_txt = result_dict['encoding']with open(dir, mode='r', encoding=encoding_cmd_txt) as cmd_read:for cmd in cmd_read:stdout = conn.send_command(cmd.strip())with open(f'{path}{i['ip']}的巡检记录.txt', mode='a', encoding='utf-8') as addwrite:addwrite.write(stdout)

        主程序入口点

if __name__ == '__main__':with open('host.csv',mode='rb') as file:raw_data = file.read()result = chardet.detect(raw_data)encoding = result['encoding']with open('host.csv',mode='r',encoding=encoding) as file:reader = csv.DictReader(file)max_thread = 10 #定义线程池中使用多少线程for i in reader:with ThreadPoolExecutor(max_workers=max_thread) as t:t.submit(xijie,i) #提交任务

可以看出,由于将代码细节给抽象化成函数,因此整个代码显得更简洁了,特别是在主程序入口的体现,无需了解代码细节,直接引用即可。

具体代码实现

import os
from concurrent.futures import ThreadPoolExecutor
from os import makedirs
from netmiko import ConnectHandler
import csv
import chardetdef xijie(i):if i['厂商'] == '华为' and i['协议'] == 'ssh':device_type = 'huawei'cmd_txt = '华为巡检命令.txt'elif i['厂商'] == '华为' and i['协议'] == 'telnet':device_type = 'huawei_telnet'cmd_txt = '华为巡检命令.txt'elif i['厂商'] == '华三' and i['协议'] == 'ssh':device_type = 'hp_comware'cmd_txt = 'H3C巡检命令.txt'elif i['厂商'] == '华三' and i['协议'] == 'telnet':device_type = 'hp_comware_telnet'cmd_txt = 'H3C巡检命令.txt'elif i['厂商'] == '锐捷' and i['协议'] == 'ssh':device_type = 'ruijie_os'cmd_txt = '锐捷巡检命令.txt'elif i['厂商'] == '锐捷' and i['协议'] == 'telnet':device_type = 'ruijie_os_telnet'cmd_txt = '锐捷巡检命令.txt'device = {'device_type': device_type,'host': i['ip'],'username': i['username'],'password': i['password'],}conn = ConnectHandler(**device)dir = os.path.join('./巡检命令文件/', cmd_txt)path = './巡检记录/'if os.path.exists(path):with open(dir, mode='rb') as ffile:data_bs = ffile.read()result_dict = chardet.detect(data_bs)encoding_cmd_txt = result_dict['encoding']with open(dir, mode='r', encoding=encoding_cmd_txt) as cmd_read:for cmd in cmd_read:stdout = conn.send_command(cmd.strip())with open(f'{path}{i['ip']}的巡检记录.txt', mode='a', encoding='utf-8') as addwrite:addwrite.write(stdout)else:makedirs(path)with open(dir, mode='rb') as ffile:data_bs = ffile.read()result_dict = chardet.detect(data_bs)encoding_cmd_txt = result_dict['encoding']with open(dir, mode='r', encoding=encoding_cmd_txt) as cmd_read:for cmd in cmd_read:stdout = conn.send_command(cmd.strip())with open(f'{path}{i['ip']}的巡检记录.txt', mode='a', encoding='utf-8') as addwrite:addwrite.write(stdout)if __name__ == '__main__':with open('host.csv',mode='rb') as file:raw_data = file.read()result = chardet.detect(raw_data)encoding = result['encoding']with open('host.csv',mode='r',encoding=encoding) as file:reader = csv.DictReader(file)max_thread = 10for i in reader:with ThreadPoolExecutor(max_workers=max_thread) as t:t.submit(xijie,i)

http://www.dtcms.com/a/617180.html

相关文章:

  • 做企业网站类型做网站设计需求
  • 网站自动售卡怎么做帮别人做网站怎么备案
  • 成都学校网站建设开了网站建设公司 如何接业务
  • 织梦网站安装出现404 not found公司装修合同范本
  • 茂名网站制作推广网络服务商主要包括哪些
  • 做网站的后台用什么开发比较好经典品牌策划书范文案例
  • 长沙响应式网站设计有哪些品牌设计公司网站
  • 网站开发报告长沙网站seo外包
  • 垂直电商网站如何做内容运营wps上怎么做网站点击分析表
  • 学做土建资料员的网站wordpress 主页文件
  • 佛山免费自助建站模板wordpress怎么填写关键词
  • 苏州市建设局招标网站苗木网站模版
  • 设计单位在厦门什么网站营业执照注销
  • 网站备案需要当面核验哪些信息村级网站建设助力脱贫攻坚
  • 网站制作的服务怎么样网站开发设计师
  • 网页网站导读怎么做营商环境建设局网站
  • 建站基础食品品牌策划方案
  • 景德镇做网站县信用平台网站建设情况
  • 佛山外包网站建设网站建设建站公司
  • 安徽省教育局网站建设方案徐州关键词优化平台
  • 红酒手机网站模板可发外链的高权重网站
  • 电子商务模拟实训报告企业网站建设怎样登录柳州建设网站
  • 建设网站规模与类别装修设计软件 知乎
  • 做视频网站怎么赚钱的普通电脑怎么做网站服务器吗
  • 国内最好的网站建设百度关键词查询排名怎么查
  • 响应式网站的排版兰州财经大学网站开发与维护
  • 如何制作一个简易网站学做网站都要学什么专业
  • 建应用网站工程招标信息在哪看
  • 做网站赚钱缴税吗便利的龙岗网站设计
  • 公司网站设计怎么做wordpress 不收录