换了堡垒机,python自动巡检OA服务器的脚本进行修改

2023-10-29

01.复制docx模板,重命名模板

02.ssh登录堡垒机,输入命令,获取结果写入txt文件

03.用txt文件构假的putty窗口,并截图

04.把截图插入docx文档

05.把生成txt文件,png文件删除

D:\Study\myproject\Python_auto_office\auto_check_new\main_ssh.py

#01.这个是主程序

# #-*-coding:utf-8-*-
'''000.导入包'''
#001.把字符串变列表的包
from posixpath import split
#002.SSH连接堡垒机,输入命令返回结果到txt文件的包
import util.exe_ssh as es 
#003.构建截图窗口的包
import util.ssh_windows as sw
#004.截图的包
import util.screen_catch as sc
#005.向巡检报告插入图片的包
import util.insert_image as ii
#006.删除txt,png的包
import util.dele_file as df
#007.多线程的包
import threading
#008.时间的包
import time
#009.存储ip,端口,账号,密码,文件地址信息的类
import entity.ssh_info as si
'''100.变量'''
#101.获取当天的年月日
current_time = time.strftime('%Y-%m-%d',time.localtime(time.time()))
#102.我所有登录信息话在ssh_access类里面,通过对象调用变量参数
ssh_obj = si.ssh_access()
#103.单纯文件名
file_name = ssh_obj.file_name
#104.文件的后序docx#
seq_name = ssh_obj.seq_name
#105.存放巡检报告的目录
default_path = ssh_obj.default_path
#106.巡检报告模板的地址
origen_path = default_path+"\\"+file_name+seq_name
#107.重命名巡检模板的巡检报告的地址
rename_path = default_path+"\\"+current_time+"\\"+file_name+current_time+seq_name
#108.putty,因为做一个假的putty窗口,putty图标的位置
icon_path=ssh_obj.icon_path
#109.存放命令返回结果txt文件的目录位置
txt_path=ssh_obj.txt_path
#110.访问堡垒机的ip地址
ip = ssh_obj.ip
#111.访问堡垒机的端口
port=ssh_obj.port
#112.访问堡垒机的账号
account=ssh_obj.account
#113.访问堡垒机的密码
pwd=ssh_obj.pwd
#114.服务器ip地址的列表
fwq_name = [] 
for value in ssh_obj.ip_dic.values():
    fwq_name.append(value)
#115.存放需要命令的列表
fwq_command=ssh_obj.command_list
#116.服务器中文搜索的列表
fwq_search_name=[]
for key in ssh_obj.ip_dic.keys():
    fwq_search_name.append(key)
#117.存放txt
fwq_pre_txt_address = ssh_obj.fwq_pre_txt_address
fwq_pre_img_address = ssh_obj.fwq_pre_img_address
'''200.业务代码'''
#连接堡垒机,SSH连接返回命结果
'''服务器的中文名'''
#fwq_search_name
'''服务器的命令'''
#fwq_command
'''服务器的ip地址'''
#fwq_name
'''命令结果输出到txt的目录地址'''
#fwq_pre_txt_address
#201.遍历服务器,把SSH连接堡垒机服务器输入命令返回结果写入txt文件中
es.comand2txt_loop(
    ip,
    port,
    account,
    pwd,
    fwq_search_name,
    fwq_command,
    fwq_name,
    fwq_pre_txt_address)
#202.遍历截图
sw.show_windows_loop(fwq_pre_txt_address,fwq_pre_img_address,icon_path)    
#203.遍历插入图片
ii.table_insert_img_loop(rename_path,fwq_pre_img_address)    

#补充命令,只有一个服务器用这个命令,所以单独写一个
#su - grid asmcmd lsdg
txt_address_11=fwq_pre_txt_address+fwq_name[3]+'-5.txt'
title_11="root@"+fwq_name[3]
img_path_11=fwq_pre_img_address+txt_address_11.split('.')[3]+'.png'
es.comand2txt_test(ip,
                   port,
                   account,
                   pwd,
                   fwq_search_name[3],
                   ssh_obj.command_list_plus[0],
                   txt_address_11)
a=sw.show_windows(txt_address_11,title_11,icon_path)                                              
b=sc.screenshot_zone(img_path_11)
p1=threading.Thread(target=a,args=(None))
p2=threading.Thread(target=b,args=(None))
p2.start()
p1.start()  
#往docx文档的标记插入图片
ii.table_insert_img(rename_path,img_path_11,'11-5') 
#把生成png图片删除
df.del_file(fwq_pre_img_address)     
#把生成txt文件删除
df.del_file(txt_path)

这个包用来SSH访问堡垒机获取命令返回结果

paramiko的使用

D:\Study\myproject\Python_auto_office\auto_check_new\util\exe_ssh.py

# coding: utf-8
'''000.导入包'''
#001.用来休眠1秒的包
import time
#002.这个是访问堡垒机的包
import paramiko
#003.迭代遍历对像的包
import itertools
'''001.方法'''
#101.删除特定字符串前的字符串的方法
def dele_before_str(longstring,s):
    s=s+""
    c=''.join(longstring.partition(s)[1:])
    return c
#102.s1字符串在s2字符串出现的次数
def check(s1,s2):
    return int(sum(map(lambda ch:s1.count(ch),s2))/2)   
 
#103.命令结果生成txt文件
def comand2txt_test(
    ip,
    port,
    account,
    pwd,
    server,
    command,
    txt_address
    ):
    #私钥
    pkey=paramiko.RSAKey.from_private_key_file("C:\\Users\\human\\.ssh\\id_rsa",password=pwd)
    #paramiko SSH对象
    client = paramiko.SSHClient()
    #忘记了
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    #连接堡垒机
    client.connect(hostname=ip,port=port,username=account,pkey=pkey)
    shell = client.invoke_shell()
    #这个根据不同堡垒机,操作命令不同
    shell.send(chr(0x2F))#/
    #有时需要睡眠一点时间才能正常运行
    time.sleep(1)
    #搜索服务名 例如数据库服务1 这个堡垒机支持中文搜索
    shell.send(server)    
    time.sleep(1)
    shell.send(chr(0x0D))#回车
    shell.send(chr(0x0D))#回车
    time.sleep(1)
    #输入命令,例如df -h
    shell.send(command)
    time.sleep(1)
    shell.send(chr(0x0D))#回车
     
    '''用来写到txt'''
    #来一个死循环
    while True:
        time.sleep(1)
        stdout = shell.recv(819200)
        #编码格式变为utf-8
        longstring = stdout.decode('utf-8')
        # print(longstring)
        #对字符串进行编辑
        longstring = dele_before_str(
            longstring,'[root').replace(
                '--color=never','')
        a=longstring.replace('-n 1 -b','')
        if check("~]#",a)>=2:
            with open(txt_address,'w') as f:
                print(a,file = f)
                # print(longstring)
            break

def comand2txt_loop(
                    ip,
                    port,
                    account,
                    pwd,
                    fwq_search_name,
                    fwq_command,
                    fwq_name,
                    fwq_pre_txt_address):
    fwq_imf=[]
    for x in itertools.product(fwq_search_name,fwq_command,fwq_name):
        'ip,port,account,pwd,server,command,txt_address'
        fwq_imf.insert(0,ip)
        fwq_imf.insert(1,port)
        fwq_imf.insert(2,account)
        fwq_imf.insert(3,pwd)
        fwq_imf.insert(4,x[0])
        fwq_imf.insert(5,x[1])
        fwq_imf.insert(6,fwq_pre_txt_address+x[2]+"-"+str(fwq_command.index(x[1]))+".txt")   
        comand2txt_test(fwq_imf[0],fwq_imf[1],fwq_imf[2],fwq_imf[3],fwq_imf[4],fwq_imf[5],fwq_imf[6])
        #当遍历到最后一个ip,最后一个命令时,跳出循环
        #例如:
        if x[2]=='192.168.200.12' and fwq_imf[5]=="iostat":
            print("服务器名:")
            print(x[2])
            print("命令")
            print(fwq_imf[5])
            print("退出循环")
            #退出循环
            break

tkinker的使用、

D:\Study\myproject\Python_auto_office\auto_check_new\util\ssh_windows.py

'''000.导入包'''
#001.生成python交换窗口的包
import tkinter as tk
#002.屏幕截图的包
import util.screen_catch as sc
#003.用来体眠时间包
import time 
#004.多线程包
import threading
#005.返回目录的文件名的包
import util.return_dir_file_name as rf
#006.左对齐的包
from turtle import left
#007.日期时间的包
from datetime import datetime
#file_path 打开路径
#title     窗口的标题
#icon_path 窗口图标的路径
'''100.方法'''
#101.txt的文件名,putty窗口的标题,putty窗口的图标
def show_windows(file_path,title,icon_path):
    print("show_windows:"+str(datetime.now()))#显示一下时间
    #打开txt文档读取内容
    file_handle = open(file_path,mode = 'r')
    content = file_handle.read()
    root = tk.Tk()
    #弹出窗口在最上层显示
    root.attributes("-topmost",1)
    root.after(3000, root.destroy)#放在这里才能生效 5秒后窗口关闭 关闭完一个窗口,可以再打开一个窗口
    # root.after(5000, root.quit)#放在这里才能生效 5秒后窗口关闭
    root.title(title)
    #分辨率
    root.geometry('3000x1800')
    var = tk.StringVar()
    label = tk.Label (root,
                      textvariable=var,
                      bg = 'black',
                      fg = 'white',
                      font = ('新宋体',12),
                      anchor="nw",
                      justify='left',
                      width = 2880,
                      height = 1800)
    var.set(content)
    label.pack()
    root.iconbitmap(icon_path)
    root.mainloop()
    # sc.screenshot(img_path)

def show_windows_loop(fwq_pre_txt_address,
                      fwq_pre_img_address,
                      icon_path):
    #获取目录中的文件名
    return_file_list= rf.re_file_name_list(fwq_pre_txt_address)
    print(return_file_list)
    #2022_06_17 需要使用
    for i in return_file_list:
    #创建ssh窗口 截图 保存截图到img目录
    #2022-06-17
        ssh_txt=fwq_pre_txt_address+i
        print(ssh_txt)
        ssh_title="root@"+i.split('-')[0].replace('.txt','')
        path_pre = fwq_pre_img_address
        image_path = path_pre+i.replace('.txt','')+'.png'
        # doc_image_name=i.replace('.txt','')+'.png'
        # print(ssh_title)
        print('图片的路径:'+image_path)
        # #txt文件的路径 还有title "root@192.168.50.55"
        print("文件名:"+i)
        # #2022-06-01
        a=show_windows(ssh_txt,ssh_title,icon_path) 
        # b=sc.screenshot(image_path)
        b=sc.screenshot_zone(image_path)
        p1=threading.Thread(target=a,args=(None))
        p2=threading.Thread(target=b,args=(None))
        p2.start()   
        time.sleep(1)
        p1.start()

D:\Study\myproject\Python_auto_office\auto_check_new\util\screen_catch.py

截图的包

# pip install -U pillow 导入库
# 这是screen_catch.py文件
import time
from datetime import datetime
from PIL import ImageGrab  
def screenshot(file_name_png):
    ImageGrab.grab().save(file_name_png)
def screenshot_zone(file_name_png):
    if "107-0.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,2095,1795)).save(file_name_png)
    if "107-1.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1090,1460)).save(file_name_png)
    if "107-2.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1360,445)).save(file_name_png)
    if "107-3.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1410,1795)).save(file_name_png)    
    if "107-4.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1410,1795)).save(file_name_png)
    if "107-5.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1420,1180)).save(file_name_png)
    if "150-0.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,2090,1795)).save(file_name_png)
    if "150-1.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1000,1300)).save(file_name_png)
    if "150-2.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1335,480)).save(file_name_png)
    if "150-3.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1440,1795)).save(file_name_png)    
    if "150-4.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1420,1200)).save(file_name_png)
    if "150-5.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1420,1750)).save(file_name_png)
    if "157-0.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,2130,1795)).save(file_name_png)
    if "157-1.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,970,1350)).save(file_name_png)
    if "157-2.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1345,480)).save(file_name_png)
    if "157-3.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1440,1795)).save(file_name_png)    
    if "157-4.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1440,1200)).save(file_name_png) 
    if "11-0.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,2600,1795)).save(file_name_png)
    if "11-1.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,970,1200)).save(file_name_png)
    if "11-2.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1290,470)).save(file_name_png)
    if "11-3.png" in file_name_png:       
        ImageGrab.grab(bbox=(15,10,1645,1795)).save(file_name_png)
    if "11-4.png" in file_name_png:       
        ImageGrab.grab(bbox=(15,10,1320,1200)).save(file_name_png)    
    if "11-5.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,2270,500)).save(file_name_png)   
    if "12-5.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,2100,1755)).save(file_name_png) 
    if "12-0.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,2050,1795)).save(file_name_png) 
    if "12-1.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,960,1250)).save(file_name_png)
    if "12-2.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1300,480)).save(file_name_png)    
    if "12-3.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1440,1795)).save(file_name_png)    
    if "12-4.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1440,1200)).save(file_name_png)   
    if "55-0.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,2270,500)).save(file_name_png)    
    if "55-1.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1050,895)).save(file_name_png)  
    if "55-2.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1600,480)).save(file_name_png)  
    if "55-3.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1440,1755)).save(file_name_png)  
    if "55-4.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1400,1700)).save(file_name_png) 
    if "55-5.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1100,1400)).save(file_name_png) 
    if "55-6.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1400,1800)).save(file_name_png)  
    if "55-7.png" in file_name_png:
        ImageGrab.grab(bbox=(15,10,1100,1800)).save(file_name_png) 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

换了堡垒机,python自动巡检OA服务器的脚本进行修改 的相关文章

  • API 端点的 Django 子域配置

    我已经建立了一个 Django 项目 它使用django rest framework提供一些 ReST 功能 网站和其他功能都运行良好 然而有一个小问题 我需要我的 API 端点指向一个不同的子域 例如 当用户访问该网站时 他 她可以根据
  • 操作数无法与形状 (128,) (0,) 错误一起广播

    我正在尝试实现面部识别登录系统 但出现错误 操作数无法与形状 128 0 一起广播 我不知道什么或如何解决它 这是我已实现的 view py 和 FaceDetector py 以及我从服务器收到的错误 errors Traceback m
  • Python 在 chroot 中运行时出现错误

    我尝试在 chroot 中运行一些 Python 程序 但出现以下错误 Could not find platform independent libraries
  • Python的reduce()短路了吗?

    If I do result reduce operator and False 1000 得到第一个结果后它会停止吗 自从False anything False 相似地 result reduce operator or True 10
  • html 解析器 python

    我正在尝试解析一个网站 我正在使用 HTMLParser 模块 问题是我想解析第一个 a href 评论后 但我真的不知道该怎么做 所以我在文档中发现有一个函数叫做handle comment 但我还没有找到如何正确使用它 我有以下内容 i
  • 如何在 ReportLab 段落中插入回车符?

    有没有办法在 ReportLab 的段落中插入回车符 我试图将 n 连接到我的段落字符串 但这不起作用 Title Paragraph Title n Page myStyle 我想要这样做 因为我将名称放入单元格中 并且想要控制单元格中的
  • 用Python中的嵌套for循环替换重复的if语句?

    在我编写的下面的代码中 n 4 所以有五个 if 语句 所以如果我想将 n 增加到 比如说 10 那么就会有很多 if 语句 因此我的问题是 如何用更优雅的东西替换所有 if 语句 n p 4 5 number of trials prob
  • 如何修复错误“AttributeError:‘模块’对象在 python3 中没有属性‘客户端’?

    以下是我的代码 import http h1 http client HTTPConnection www bing com 我认为没问题 但是 python 给了我以下错误 AttributeError 模块 对象没有属性 客户端 我想知
  • 如何使用 Python 多处理避免在分叉进程中加载​​父模块

    当您创建一个Pool使用Python的进程multiprocessing 这些进程将分叉 父进程中的全局变量将显示在子进程中 如下面的问题所述 如何限制多处理进程的范围 https stackoverflow com questions 2
  • 一行Python和SQLite代码,为什么需要加“,”? [复制]

    这个问题在这里已经有答案了 c execute INSERT INTO numbers VALUES random randint 0 100 如果我将上面的代码更改为 c execute INSERT INTO numbers VALUE
  • 如何对这个 Flask 应用程序进行单元测试?

    我有一个 Flask 应用程序 它使用 Flask Restless 来提供 API 我刚刚写了一些身份验证来检查 如果消费者主机被识别 该请求包含一个哈希值 通过加密 POST 的请求内容和 GET 的 URL 以及秘密 API 密钥来计
  • 如何使用 PySpark 有效地将这么多 csv 文件(大约 130,000 个)合并到一个大型数据集中?

    我之前发布了这个问题并得到了一些使用 PySpark 的建议 如何有效地将这一大数据集合并到一个大数据框中 https stackoverflow com questions 60259271 how can i merge this la
  • Python正则表达式从字符串中获取浮点数

    我正在使用正则表达式来解析字符串中的浮点数 re findall a zA Z d d t 是我使用的代码 这段代码有问题 如果数字和任何字符之间没有空格 则不会解析该数字 例如 0 1 2 3 4 5 6 7 8 9 的预期输出为 0 1
  • 求解不等式系统时“多项式错误:仅允许使用单变量多项式”

    我想找到以下两个常数的区间cons1 and cons2我写了下面的代码 from sympy import Poly from sympy import Abs from sympy solvers inequalities import
  • 为什么“return self”返回 None ? [复制]

    这个问题在这里已经有答案了 我正在尝试获取链的顶部节点getTopParent 当我打印出来时self name 它确实打印出了父实例的名称 然而 当我回来时self 它返回 None 为什么是这样 class A def init sel
  • 如何强制 Y 轴仅使用整数

    我正在使用 matplotlib pyplot 模块绘制直方图 我想知道如何强制 y 轴标签仅显示整数 例如 0 1 2 3 等 而不显示小数 例如 0 0 5 1 1 5 2 等 我正在查看指导说明并怀疑答案就在附近matplotlib
  • 如何向 SCons 构建添加预处理和后处理操作?

    我正在尝试在使用 SCons 构建项目时添加预处理和后处理操作 SConstruct 和 SConscript 文件位于项目的顶部 预处理动作 生成代码 通过调用不同的工具 gt 不知道在此预处理之后将生成的确切文件 可以创建用于决定生成哪
  • 最小硬币找零问题——回溯

    我正在尝试用最少数量的硬币解决硬币找零问题 采用回溯法 我实际上已经完成了它 但我想添加一些选项 按其单位打印硬币数量 而不仅仅是总数 这是我下面的Python代码 def minimum coins coin list change mi
  • 在Python中从日期时间中减去秒

    我有一个 int 变量 它实际上是秒 让我们调用这个秒数X 我需要得到当前日期和时间 以日期时间格式 减去的结果X秒 Example If X是 65 当前日期是2014 06 03 15 45 00 那么我需要得到结果2014 06 03
  • 从 pandas 数据框中绘制堆积条形图

    我有数据框 payout df head 10 复制以下 Excel 绘图的最简单 最智能和最快的方法是什么 我尝试过不同的方法 但无法让一切都到位 Thanks 如果您只想要一个堆积条形图 那么一种方法是使用循环来绘制数据框中的每一列 并

随机推荐

  • 单片机----

    开启内部上拉电阻 pbph 0 1
  • C++多线程并发总结

    文章目录 1 线程创建与管理 1 1 并发与并行 1 2 多线程并发与多进程并发 2 C 线程创建 2 1 std thread 线程同步之互斥锁 std mutex std unique lock lock与unlock保护共享资源 lo
  • Java封装OkHttp3工具类

    一 准备工作 Maven项目在pom文件中引入jar包
  • 阿里云 MSE 助力开迈斯实现业务高增长背后带来的服务挑战

    开迈斯新能源科技有限公司于 2019 年 5 月 16 日成立 目前合资股东分别为大众汽车 中国 投资有限公司 中国第一汽车股份有限公司 一汽 大众汽车有限公司 增资扩股将在取得适当监督 包括反垄断 审批后完成 万帮数字能源股份有限公司和安
  • 一文看懂哈希表并学会使用C++ STL 中的哈希表

    最近在刷题以及做编程练习的作业时经常会用到哈希表 碰到一些想用的函数时每次都看别人的博客 现结合别人的博客对哈希表做个总结 本篇博客的主要内容如下 1 哈希表的定义 2 如何使用STL库中的哈希表 3 STL中哈希表的常用函数 1 哈希表的
  • 【微信小程序警告】property received type-uncompatible value: expected <String> but get null value. Used empty

    微信小程序警告property received type uncompatible value expected but get null value Used empty 遇到这种错误多半是在wxml文件中写入了未在js文件中定义的值
  • 787. 归并排序

    文章目录 Question Ideas Code Question 给定你一个长度为 n 的整数数列 请你使用归并排序对这个数列按照从小到大进行排序 并将排好序的数列按顺序输出 输入格式 输入共两行 第一行包含整数 n 第二行包含 n 个整
  • element ui表格data搜索重置功能

    element ui表格搜索重置功能 本地 1 html
  • STM32_Debug 使用ST-Link进行调试出现Error:Flash Download Failed-"Cortex-M3" 解决方案

    在Debug窗口依次注意以下几个点 1 选择与主控芯片相配套的芯片 2 选择ST Link Debugger 此处注意该页面最下面一行可不更改 亲测有效 3 接上图点击进入Setting 依次选择 4 进入Flash Download 注意
  • python类基础

    类把数据与功能绑定在一起 创建新类就是创建新的对象 类型 从而创建该类型的新 实例 类实例具有多种保持自身状态的属性 类实例还支持 在类中定义的 改变自身状态的方法 和其他编程语言相比 Python 用非常少的新语法和语义将类加入到语言中
  • 算法题:一堆数组的动态和

    题目描述 给你一个数组 nums 数组 动态和 的计算公式为 runningSum i sum nums 0 nums i 请返回 nums 的动态和 from typing import List x 1 2 3 4 def runnin
  • Logback 集成 Skywalking Trace ID 并结合skywalking agent源码进行分析

    Logback集成skwalking的traceId 本文主要讲述在工程的logback文件中集成skywalking的traceId 以便在日志中打印对应的traceId 文章目录 Logback集成skwalking的traceId 前
  • Android 视频后台播放,TextureView封装使用

    突然给了个视频开发任务 之前做过的都是不可见后停止播放状态使用surfaceView 基本上就搞定了 突然提出后台继续播放 网上也没找到相关资料 所以就总结一下 第一次使用Mediaplayer SurfaceView 出现了问题 home
  • Hessian序列化过程中Map的问题

    开篇 近期线上dubbo不停的报Hessian反序列化的警告日志 虽然不影响正常使用但作为有追求的程序员还是再一次尝试解决下 之所以说再一次是因为前一次尝试解决 但是没解决成功 错误信息如下 结论是在consumer端序列化了object
  • 配置自己的Git远程服务器

    配置自己的Git远程服务器 具体分为服务器端和客户端 Ubuntu 17 10 1 服务端和客户端安装git 具体的安装步骤可参考其他相关笔记 gt sudo apt get install git 2 服务端安装ssh 在我做实验时就有服
  • 【数据迁移复盘】

    数据迁移复盘 迁移场景 新功能上线 将4w条老的供应商数据迁移到新的数据结构表中 涉及到8张表 10多种迁移逻辑 当时在测试环境和正式环境做了几条测试数据的迁移 1s左右迁移完成1个供应商 感觉挺快 就没有做全量的时间估算 现在感觉当时太年
  • Jenkins 插件下载速度慢安装失败?这篇文章可能解决你头等难题!

    Jenkins部署完毕 如果不安装插件的话 那它就是一个光杆司令 啥事也做不了 所以首先要登陆管理员账号然后点击系统管理再点击右边的插件管理安装CI CD必要插件 但是问题来了 jenkins下载插件速度非常慢 而且经常提示下载插件失败 真
  • python爬虫,selenium调用chrome浏览器的webdriver插件版本问题

    要想正常执行代码 需要提前把chrome浏览器的webdriver插件下载到本地的chrome浏览器的安装文件夹下面去 具体的位置就是如下图所示 如图 你自己的chrome浏览器在哪 你下载好解压缩的webdriver就放在对应的位置即可
  • R2 的Python实现总结

    关于R2的定义这里不进行叙述 维基百科上有很详细的解释 https en wikipedia org wiki Coefficient of determination 这里记录一下几种Python实现 1 从sklearn metric中
  • 换了堡垒机,python自动巡检OA服务器的脚本进行修改

    01 复制docx模板 重命名模板 02 ssh登录堡垒机 输入命令 获取结果写入txt文件 03 用txt文件构假的putty窗口 并截图 04 把截图插入docx文档 05 把生成txt文件 png文件删除 D Study myproj