python 巡检报告中的邮件处理

news2024/12/24 10:15:58

00.创作背景,在每天的巡检报告中要 要检查oa相关服务器的备份作业是否备份成功

     那个备份软件有个功能,就是完成备份作业后,可以发送信息到我的邮箱。

01.通过检查我邮箱的信息,就可以了解那个备份作业的情况。

通过解释邮件的名称可以了解备份作业的名称。

通过解释邮件的内容可以得知作业是否完成,因为备份作业前会发一封邮件告诉我备份作业开始的。当备份作业完成后也会发一封邮件显示作业完成。

这样可以间接对备份作业进行一个跟踪。

因为邮件的内容是一种接近于html的格式,所以要编写一个方法对内容进行解释,获取自己想要的内容。

03.备份作业分为每天,每周,每月。

        首先讲一下每天,执行备份作业时间,从早上到晚上都有的。而我检查邮箱的时间是早上9点左右,所以对于一些晚上10点才执行的备份作业,我只检查昨天的未读邮件。有些作业超过24小时的,我直接检查两天。

        之后是每周,检查时间最长跨度是7天,但有时周五夜易的备份作业,周五的早上检查不出来,那我就把检查时间的跨度改为8天。

        每月同理,但要计算每月每一个周六,周日的时间,每月第二个周六,周日的时间。

例如:今个月没有到第一个周六,就显示上个月第一个周六。

'''000导入包'''
#01邮件的api
'''收邮件的包'''
import imaplib
'''邮件的工具'''
import email.utils

from html import unescape as un
#02.解释html的包
# 
# import date_util as du
# import read_html as rh
# import bk_job_info as bji

'''读取html的包,用来解释html'''
import util.read_html as rh
'''处理日期的包'''
import util.date_util as du
'''保存账号信息的包'''
import entity.ssh_info as si

#03.导入修改时间格式的类
from datetime import datetime, timedelta
#04.导入保存作业信息的包
'''100.这个是变量'''
#获取imap的信息 例如:'imap.163.com'
imap=si.ssh_access().imap
#获取我邮箱的密码
email_pwd=si.ssh_access().email_pwd
#获取我邮箱的账号
email_my_account=si.ssh_access().emal_my_account
#这是发件人的账号,这个是固定的
email_bk_account=si.ssh_access().email_bk_account

# 101.设置时间范围
'''因为有时时间跨度在1天多一点,所以时间定在2天前'''
since = (datetime.now() - timedelta(days=2)).strftime('%d-%b-%Y')  # 2天前
'''同上,但这个时间跨度为7天'''
week = (datetime.now() - timedelta(days=7)).strftime('%d-%b-%Y')  # 7天前

before = datetime.now().strftime('%d-%b-%Y')  # 现在
now=datetime.now().strftime("%Y-%m-%d") #例如  获取系统当前时间,并以2024-04-18格式显示
yesterday=(datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d') 

keyword_every_day="每天"
today=0 

#判断当天的增量备份是否成功
def check_today_backup(
        imap,
        email_my_account,
        email_pwd,
        job_name
):
    '''200.业务逻辑'''
    # 201.连接到邮箱服务器
    mail = imaplib.IMAP4_SSL(imap)
    pwd = email_pwd
    # 202.登录邮箱(这个要隐藏)
    mail.login(email_my_account, pwd)
    # 203选择邮箱文件夹
    mail.select('INBOX')
    # 204.搜索符合条件的邮件
    """status, data = mail.search(None, 'ALL')  """# 搜索所有邮件
    """status, data = mail.search(None, '(UNSEEN)')"""  # 搜索未读邮件
    # 205.近一天未读邮件
    status, data = mail.search(None, '(UNSEEN)'.format(since,before))  # 搜索未读邮件

    if status == 'OK':
        # 获取邮件id列表
        email_ids = data[0].split()
        split_list=""
        return_list=[]
        # 遍历邮件id列表
        for email_id in email_ids:
        # 根据邮件id获取邮件内容
            status, data = mail.fetch(email_id, '(RFC822)')
            raw_email = data[0][1]
            # 解析原始邮件内容
            msg = email.message_from_bytes(raw_email)
            body = None
            # 判断邮件内容类型
            if msg.is_multipart():
                for part in msg.get_payload():
                    if part.get_content_type() == 'text/plain':
                        body = part.get_payload(decode=True).decode('utf-8')
            else:
                body = msg.get_payload(decode=True).decode('utf-8')
            plain_text = un(body)
            # print('正文内容:', plain_text)
            content=rh.explain_html(plain_text)
            # print("content的值:")
            # print(content)
            for i in content:
                split_list = i.split(":")
                if split_list[1]=="作业完成。":
                    if now in content[8]:
                        if content[0].split(":")[1]==job_name:
                            return_list.append(True)
                            return_list.append(content[0].split(":")[1])
                            return_list.append(content[8][5:])
                            return return_list
                        #作业结束时间
    # 关闭连接
    mail.close()
    mail.logout()


#检查昨天的备份
def check_yesterday_backup(
        imap,
        email_my_account,
        email_pwd,
        job_name
):

    '''200.业务逻辑'''
    # 201.连接到邮箱服务器
    mail = imaplib.IMAP4_SSL(imap)
    pwd = email_pwd
    # 202.登录邮箱(这个要隐藏)
    mail.login(email_my_account, pwd)
    # 203选择邮箱文件夹
    mail.select('INBOX')
    # 204.搜索符合条件的邮件
    """status, data = mail.search(None, 'ALL')  """# 搜索所有邮件
    """status, data = mail.search(None, '(UNSEEN)')"""  # 搜索未读邮件
    # 205.近一天未读邮件
    status, data = mail.search(None, '(UNSEEN)'.format(since,before))  # 搜索未读邮件
    # 获取邮件id列表
    email_ids = data[0].split()
    split_list=""
    return_list=[]
    # 遍历邮件id列表
    for email_id in email_ids:
    # 根据邮件id获取邮件内容
        status, data = mail.fetch(email_id, '(RFC822)')
        raw_email = data[0][1]
         # 解析原始邮件内容
        msg = email.message_from_bytes(raw_email)
        body = None
        # 判断邮件内容类型
        if msg.is_multipart():
            for part in msg.get_payload():
                if part.get_content_type() == 'text/plain':
                    body = part.get_payload(decode=True).decode('utf-8')
        else:
            body = msg.get_payload(decode=True).decode('utf-8')
        plain_text = un(body)
        # print('正文内容:', plain_text)
        content=rh.explain_html(plain_text)
        # print("content的值:")
        # print(content)
        for i in content:
            split_list = i.split(":")
            if split_list[1]=="作业完成。":
                # print("yesterday的值:")
                # print(yesterday)
                # print("content[8]的值 是开始时间")
                # print(content[8])
                if yesterday in content[8]:
                    
                    if content[0].split(":")[1]==job_name:
                        # print("这里能执行?")
                        return_list.append(True)
                        return_list.append(content[0].split(":")[1])
                        return_list.append(content[8][5:])
                        # print(return_list)
                        return return_list
                    #作业结束时间
        # 关闭连接
    mail.close()
    mail.logout()


#检查每周的全量备份
def check_week_full_backup(
    imap,
    email_my_account,
    email_pwd,
    job_name
    ):
    '''200.业务逻辑'''
    # 201.连接到邮箱服务器
    mail = imaplib.IMAP4_SSL(imap)
    pwd = email_pwd
    # 202.登录邮箱(这个要隐藏)
    mail.login(email_my_account, pwd)
    # 203选择邮箱文件夹
    mail.select('INBOX')
    # 204.搜索符合条件的邮件
    """status, data = mail.search(None, 'ALL')  """# 搜索所有邮件
    """status, data = mail.search(None, '(UNSEEN)')"""  # 搜索未读邮件
    # 205.近一周未读邮件,搜索条件不起效
    status, data = mail.search(None, '(UNSEEN SINCE{})'.format(week))  # 搜索未读邮件
    
    # 获取邮件id列表
    email_ids = data[0].split()
    split_list=""
    return_list=[]
    # 遍历邮件id列表
    for email_id in email_ids:
    # 根据邮件id获取邮件内容
        status, data = mail.fetch(email_id, '(RFC822)')
        raw_email = data[0][1]
        # 解析原始邮件内容
        msg = email.message_from_bytes(raw_email)
        body = None
        # 判断邮件内容类型
        if msg.is_multipart():
            for part in msg.get_payload():
                if part.get_content_type() == 'text/plain':
                        body = part.get_payload(decode=True).decode('utf-8')
        else:
            body = msg.get_payload(decode=True).decode('utf-8')
            plain_text = un(body)
            # print('正文内容:', plain_text)
            content=rh.explain_html(plain_text)
            # print("content的值:")
            # print(content)
        for i in content:
            split_list = i.split(":")
            # print("content的值")
            # print(content)
            if split_list[1]=="作业完成。":
                # print("这是周的")
                # print("content的值")
                # print(content)
                    # print("yesterday的值:")
                    # print(yesterday)
                    # print("content[8]的值")
                    # print(content[8].split("T")[0].split(":")[1])
                recent_time=content[8].split("T")[0].split(":")[1]
                # 判断今天是不是周五
                isFri=du.isFriday()
                isMon=du.isMonday()
                # if isFri==True or isMon==True:
                if isFri==True:
                    # print("today的值")
                    #如果今天是周五,参数是8
                    today=8
                    # print(today)
                else:
                    # print("today的值")
                    today=7
                    #如果今天不是周五,参数是7
                    # print(today)
                if du.days_in_recently(recent_time,today):
                    # print("content的值")
                    # print(content)
                    if content[0].split(":")[1]==job_name:
                        # print("这里能执行?")
                        # print("content的值")
                        # print(content)
                        # print("job_name")
                        # print(content[0].split(":")[1])
                        # print("job_name")
                        # print(job_name)
                        return_list.append(True)
                        return_list.append(content[0].split(":")[1])
                        return_list.append(content[8][5:])
                        # print("return_list的值")
                        # print(return_list)
                        return return_list
                        #作业结束时间
                    if content[0].split(":")[1]=='OA_apache3_每周一全备' and content[8][5:].split("T")[0]==now:
                        # print("test 2024-5-27")
                        # print("content的值")
                        # print(content)
                        # print("job_name")
                        # print(content[0].split(":")[1])
                        # print("job_name")
                        # print(job_name)
                        return_list.append(True)
                        return_list.append(content[0].split(":")[1])
                        return_list.append(content[8][5:])
                        # print("return_list的值")
                        # print(return_list)
                        return return_list




            # 关闭连接
    mail.close()
    mail.logout()

#day_gaps= 每个月第一个周六  每个月第一个周日 每个月第二个周六 每个月第二个周日
#控制查询未读邮件的范围

#检查每月的全量备份
def check_month_full_backup(
    imap,
    email_my_account,
    email_pwd,
    job_name,
    day_gaps
    ):
# 200.业务逻辑
    # 201.连接到邮箱服务器
    mail = imaplib.IMAP4_SSL(imap)
    pwd = email_pwd
    # 202.登录邮箱(这个要隐藏)
    mail.login(email_my_account, pwd)
    # 203选择邮箱文件夹
    mail.select('INBOX')
    # 204.搜索符合条件的邮件
    """status, data = mail.search(None, 'ALL')  """# 搜索所有邮件
    """status, data = mail.search(None, '(UNSEEN)')"""  # 搜索未读邮件
    # 205.近一个月未读邮件
    status, data = mail.search(None, '(UNSEEN)'.format(day_gaps,before))  # 搜索未读邮件
    # 获取邮件id列表
    if status == 'OK':
        email_ids = data[0].split()
        split_list=""
        return_list=[]
        # 遍历邮件id列表
        for email_id in email_ids:
        # 根据邮件id获取邮件内容
            status, data = mail.fetch(email_id, '(RFC822)')
            raw_email = data[0][1]
             # 解析原始邮件内容
            msg = email.message_from_bytes(raw_email)
            body = None
            # 判断邮件内容类型
            if msg.is_multipart():
                for part in msg.get_payload():
                    if part.get_content_type() == 'text/plain':
                        body = part.get_payload(decode=True).decode('utf-8')
            else:
                body = msg.get_payload(decode=True).decode('utf-8')
            plain_text = un(body)
            # print('正文内容:', plain_text)
            content=rh.explain_html(plain_text)
            # print("content的值:")
            # print(content)
            for i in content:
                split_list = i.split(":")
                # print("content的值")
                # print(content)
                # print("split_list[1]的类型")
                # print(type(split_list[1]))
                # print("now的类型")
                # print(type(now))
                #如果含有作业开始,标记为已读
                if split_list[1]=="作业开始。":
                    mail.store(email_id,'+FLAGS', '\\Seen')
                #如果含有每天且不含有今天,昨天日期的,标记为已读
                if keyword_every_day in split_list[1] and now not in content[8] and yesterday not in content[8]:
                    mail.store(email_id,'+FLAGS', '\\Seen')
                
                if split_list[1]=="作业完成。":

                    # print("content的值")
                    # print(content)
                    # print("yesterday的值:")
                    # print(yesterday)
                    # print("content[8]的值 是开始时间")
                    # print(content[8])
                
                
                    if content[0].split(":")[1]==job_name:
                        # print("这里能执行?")
                        return_list.append(True)
                        return_list.append(content[0].split(":")[1])
                        return_list.append(content[8][5:])
                        # print("return_list的值")
                        # print(return_list)
                        return return_list
                        #作业结束时间
        # 关闭连接
    mail.close()
    mail.logout()



def check_backup(
        imap,
        email_my_account,
        email_pwd,
        job_name_list #工作名的列表
):
    '''200.业务逻辑'''
    # 201.连接到邮箱服务器
    mail = imaplib.IMAP4_SSL(imap)
    pwd = email_pwd
    # 202.登录邮箱(这个要隐藏)
    mail.login(email_my_account, pwd)
    # 203选择邮箱文件夹
    mail.select('INBOX')
    # 204.搜索符合条件的邮件
    """status, data = mail.search(None, 'ALL')  """# 搜索所有邮件
    """status, data = mail.search(None, '(UNSEEN)')"""  # 搜索未读邮件
    # 205.近一天未读邮件
    status, data = mail.search(None, '(UNSEEN)'.format(since,before))  # 搜索未读邮件

    if status == 'OK':
        # 获取邮件id列表
        email_ids = data[0].split()
        split_list=""
        return_list=[]
        return_list_list=[]
        # 遍历邮件id列表
        for email_id in email_ids:
        # 根据邮件id获取邮件内容
            status, data = mail.fetch(email_id, '(RFC822)')
            raw_email = data[0][1]
            # 解析原始邮件内容
            msg = email.message_from_bytes(raw_email)
            body = None
            # 判断邮件内容类型
            if msg.is_multipart():
                for part in msg.get_payload():
                    if part.get_content_type() == 'text/plain':
                        body = part.get_payload(decode=True).decode('utf-8')
            else:
                body = msg.get_payload(decode=True).decode('utf-8')
            plain_text = un(body)
            # print('正文内容:', plain_text)
            content=rh.explain_html(plain_text)
            # print("content的值:")
            # print(content)
            for i in content:
                split_list = i.split(":")
                #限制了是作业完成
              

                if split_list[1]=="作业完成。":
                    #限制了是今天
                    if now in content[8]:
                        for job_name in job_name_list:
                            if "每天" in job_name:
                                if content[0].split(":")[1]==job_name:
                                    return_list.append(True)
                                    return_list.append(content[0].split(":")[1])
                                    return_list.append(content[8][5:])

                                    return_list_list.append(return_list)
                                    
                            return return_list_list
                        #作业结束时间
    # 关闭连接
    mail.close()
    mail.logout()

#20240604
def month_ago_already_read(
        imap,
        email_my_account,
        email_pwd
        # job_name_list #工作名的列表
):
    mail = imaplib.IMAP4_SSL(imap)
    mail.login(email_my_account,email_pwd)
    mail.select('INBOX')
    one_month_ago = datetime.now()-timedelta(days=40)
    one_month_ago_str = one_month_ago.strftime('%d-%b-%Y')
    status, messages = mail.search(None, '(BEFORE {date})'.format(date=one_month_ago_str))
    if messages:
    # 将搜索到的邮件标记为已读
        for msg_id in messages[0].split():
            mail.store(msg_id, '+FLAGS', '\\Seen')
 
# 关闭连接
    mail.close()
    mail.logout()

def change_mail_seen( 
        imap,
        email_my_account,
        email_pwd):
  
    mail = imaplib.IMAP4_SSL(imap)
    mail.login(email_my_account,email_pwd)
    # 选择收件箱
    mail.select('inbox')
 
    # 搜索邮件,使用(UNSEEN)只获取未读邮件
    status, messages = mail.search(None, 'UNSEEN')
 
    # 解析邮件信息,获取邮件的UID
    if messages:
        # 获取邮件的UID列表
        mail_ids = messages[0].split()
    
        # 遍历邮件UID列表,获取每封邮件的标题
        for mail_id in mail_ids:
            # 获取邮件的标题
            status, data = mail.fetch(mail_id, '(RFC822.HEADER)')
            if status == 'OK':
                # 解析邮件头部信息,提取标题
                header = data[0][1].decode('utf-8')
                # 打印邮件标题
                # print(header)     
                # print(header.split('\n')[0])
                #首先过滤发件人是jiankong@lw.gov.cn
                if email_bk_account in header:
                   
                    if "每日" in header:
                        
                        for row in header.split('\n'):
                            if "Subject" in row:
                                print(row)
                            if "Date" in row:
                                date_str=row.replace("Date: ","")
                                datetime_obj = datetime.strptime(date_str, "%a, %d %b %Y %H:%M:%S +0800 (CST) ")
                            # 按照年月日的格式输出
                                date_formatted = datetime_obj.strftime("%Y-%m-%d")
                                # print(date_formatted)
                                # print("4天的值:")
                                # print(du.acount_date(4))
                                # print("2天的值")
                                # print(du.acount_date(2))
                                # print("列表")
                                # print(du.generate_date_range(du.acount_date(4),du.acount_date(2)))
                                if date_formatted in du.generate_date_range(du.acount_date(4),du.acount_date(2)):
                                    mail.store(mail_id, '+FLAGS', '\\SEEN')
                                    # print("ok")
                                    # print(date_formatted)
                    if "每天" in header:
                        for row in header.split('\n'):
                            if "Subject" in row:
                                print(row)
                            if "Date" in row:
                                date_str=row.replace("Date: ","")
                                datetime_obj = datetime.strptime(date_str, "%a, %d %b %Y %H:%M:%S +0800 (CST) ")
                            # 按照年月日的格式输出
                                date_formatted = datetime_obj.strftime("%Y-%m-%d")
                                # print(date_formatted)
                                # print("4天的值:")
                                # print(du.acount_date(4))
                                # print("2天的值")
                                # print(du.acount_date(2))
                                # print("列表")
                                # print(du.generate_date_range(du.acount_date(4),du.acount_date(2)))
                                if date_formatted in du.generate_date_range(du.acount_date(4),du.acount_date(2)):
                                    mail.store(mail_id, '+FLAGS', '\\SEEN')
                                    # print("ok")
                                    # print(date_formatted)
                    if "每周" in header:
                        for row in header.split('\n'):
                            if "Subject" in row:
                                print(row)
                            if "Date" in row:
                                date_str=row.replace("Date: ","")
                                datetime_obj = datetime.strptime(date_str, "%a, %d %b %Y %H:%M:%S +0800 (CST) ")
                                date_formatted = datetime_obj.strftime("%Y-%m-%d")
                                # print(date_formatted)
                                # print("14天的值:")
                                # print(du.acount_date(14))
                                # print("7天的值")
                                # print(du.acount_date(7))
                                # print("列表")
                                # print(du.generate_date_range(du.acount_date(14),du.acount_date(7)))
                                if date_formatted in du.generate_date_range(du.acount_date(14),du.acount_date(7)):
                                    mail.store(mail_id, '+FLAGS', '\\SEEN')
                                    # print("ok")
                                    # print(date_formatted)
                     
                    if "每月" in header:
                        for row in header.split('\n'):
                            if "Subject" in row:
                                print(row)
                            if "Date" in row:
                                date_str=row.replace("Date: ","")
                                datetime_obj = datetime.strptime(date_str, "%a, %d %b %Y %H:%M:%S +0800 (CST) ")
                                date_formatted = datetime_obj.strftime("%Y-%m-%d")
                                # print(date_formatted)
                                # print("14天的值:")
                                # print(du.acount_date(58))
                                # print("7天的值")
                                # print(du.acount_date(28))
                                # print("列表")
                                # print(du.generate_date_range(du.acount_date(58),du.acount_date(28)))
                                if date_formatted in du.generate_date_range(du.acount_date(58),du.acount_date(28)):
                                    mail.store(mail_id, '+FLAGS', '\\SEEN')
                                    # print("ok")
                                    # print(date_formatted)
                   
    # 关闭连接
    mail.close()
    mail.logout()

if __name__ == '__main__':

    # # 创建固定范围的列表
    # start_date = datetime.strptime('2020-01-01', '%Y-%m-%d')
    # end_date = datetime.strptime('2020-12-31', '%Y-%m-%d')
    # date_range = generate_date_range(start_date, end_date)
    # print(date_range)

    imap=si.ssh_access().imap
    email_pwd=si.ssh_access().email_pwd
    email_my_account=si.ssh_access().emal_my_account
    email_bk_account=si.ssh_access().email_bk_account
    # get_mail_name(
    #     imap,
    #     email_my_account,
    #     email_pwd)
    change_mail_seen(imap,email_my_account,email_pwd)
    # # 
    # day_backs=check_backup(
    #     imap,
    #     email_my_account,
    #     email_pwd,
    #     bji.job_info().job_name_list
    # )
    # print(day_backs)
    '''月全备'''
    # cmfb=check_month_full_backup(
    #     imap,
    #     email_my_account,
    #     email_pwd,
    #     bji.job_info().check_month_full_status["oadoc2_full_status"],
    #     day_gaps
    # )
    # print(cmfb)
    '''增备'''
    # oracle_append_status_is_ok=check_today_backup(
    # imap,
    # email_my_account,
    # email_pwd,
    # bji.job_info().check_today_append_status['oracle_append_status'])
    # print("获取是否成功")
    # print(oracle_append_status_is_ok)
    # oa_middleware_full_is_ok=check_week_full_backup(
    # imap,
    # email_my_account,
    # email_pwd,
    # # bji.job_info().check_week_full_status['oa_middleware_full_status'])
    # bji.job_info().check_week_full_status['oa_apche3_full_status'])
    # print("获取是否成功")
    # print(oa_middleware_full_is_ok)
    
'''
这个是例如
content的值:
[
'作业:Oracle每日增量备', 
'级别:INFO', 
'主机:荔湾区通用OA系统-数据库',
'地址:10.108.183.19',
'模块:rac-backup.oracle.linux-x86',
'资源:lwgov1',
'时间:2024-04-19T00:17:15+08:00', 
'开始时间:2024-04-19T00:00:00+08:00',
'结束时间:2024-04-19T00:19:38+08:00', 
'错误码:0x3000103060100002',
'消息:作业完成。']
'''

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1793705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

618大促该买哪些数码好物?数码好物选购清单来啦,闭眼不踩坑!

618年中大促,无疑是一场数码爱好者的盛宴,在这个时刻,各大品牌和商家纷纷推出超值优惠,让众多心仪的数码产品以历史最低价呈现在消费者面前。面对如此丰富的选择,你是否也在犹豫哪些数码好物值得在这个节点入手呢&…

斯坦福 AI 团队被指抄袭清华大模型:细节揭秘

近日,斯坦福AI团队因发布的AI模型被指抄袭清华大学的研究成果而陷入争议。本文将详细探讨这一事件的背景、关键细节及其对开源社区的影响。 事件背景 斯坦福的AI团队发布了一个名为“LLaMA-3V”的模型,声称只花了500美元且只用了GPT-4的1%的体量便达到…

在Windows中使用svn的命令行

windows下使用svn命令行_svn命令行工具在哪里-CSDN博客 先下载命令行工具 再进行配置 set SVN_CMD_HOMEC:\Users\admin\Desktop\Apache-Subversion-1.14.0\bin(你的安装路径) set path%path%;%SVN_CMD_HOME% svn help查看svn版本 命令行查看svn版本--真实有效_svn 版本查看…

解决微信小程序分享按钮不可用

问题描述 在微信小程序中点击胶囊按钮上的三个点,在弹出的对话框中的【分享给好友】【分享到朋友圈】按钮都属于不可用的状态,显示未设置。 问题截图 解决方案 在每个需要此功能的页面都需要添加此代码,否则就不能进行使用。 // vue3时&l…

QT系列教程(8) QT 布局学习

简介 Qt 中的布局有三种方式,水平布局,垂直布局,栅格布局。 通过ui设置布局 我们先创建一个窗口应用程序,程序名叫layout,基类选择QMainWindow。但我们不使用这个mainwindow,我们创建一个Qt应用程序类Log…

LLM系列: LLama2

推理流程 从输入文本,到推理输出文本,LLama2模型处理流程如下: step1 Tokenization 输入数据:一个句子或一段话。通常表示成单词或字符序列。 Tokenization即对文本按单词或字符序列切分,形成Token序列。Token序列再…

跑mask2former(自用)

1. 运行docker 基本命令: sudo docker ps -a (列出所有容器状态) sudo docker run -dit -v /hdd/lyh/mask2former:/mask --gpus "device0,1" --shm-size 16G --name mask 11.1:v6 (创建docker容器&…

RocketMQ教程(一):RocketMQ的基本概念

RocketMQ是什么? RocketMQ 是一个分布式消息中间件和流计算平台,由阿里巴巴团队开源并贡献给 Apache 软件基金会,现为 Apache 顶级项目。它主要用于处理大规模数据的传输问题,支持高吞吐量、高可用性和可扩展性的消息发布和订阅服务。RocketMQ 能够确保消息的可靠传输,支持…

C# Web控件与数据感应之 填充 HtmlTable

目录 关于 HtmlTable HtmlTable与BaseDataList的区别 准备数据源 ​范例运行环境 FillTable 方法 设计与实现 模板样例输出 Automatic 模式填充 ​ DynamicRows 模式填充 StaticRows 模式填充 ​ 小结 关于 HtmlTable 数据感应也即数据捆绑,是…

C语言指针与数组名的联系

目录 一、数组名的理解 a.数组名代表数组首元素的地址 b. 两个例外 二、使用指针来访问数组 三、一维数组传参的本质 一、数组名的理解 a.数组名代表数组首元素的地址 我们在使用指针访问数组的内容时,有这样的代码: int arr[10] {1,2,3,4,5,6,7,…

智慧园区智能化系统整体解决方案(111页PPT)

方案介绍: 智慧园区智能化系统整体解决方案是一个综合性的管理平台,它通过集成视频、报警、园区一卡通、产线管理、能耗管理、公共广播、信息发布等多种系统,实现园区的全方位智能化管理。该系统以基础管理平台为系统基础,提供系…

TPM 是什么?如何查看电脑的 TPM?

TPM 是什么? 首先我们来了解一下 TPM 是什么,TPM 由可信计算组织(Trusted Computing Group,TCG)开发,为了在提高计算机系统的安全性。随着网络安全威胁的不断增加,TPM 技术逐渐成为确保系统安全…

git-生成SSH密钥

git-生成SSH密钥 1 打开命令窗口2 操作 1 打开命令窗口 选择"Git Bash Here",打开Git命令窗口 2 操作 查看当前用户名称 git config user.name配置你的邮箱,“6xxxqq.com” 填写自己的邮箱 git config --global user.email "6xxxqq…

【Oracle篇】rman全库异机恢复:从RAC环境到单机测试环境的转移(第四篇,总共八篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…

STC90C51驱动LCD1602、LCD12864、OLED

主控芯片(STC90C516RDPG5151028)介绍 ROM64K,RAM1280字节,40Pin,3个定时器,1个串口,8个中断源(分别是:外部中断0(INTO)、外部中断 1(INT1)、外部中断 2(INT2)、外部中断 3(INT3)、定…

线性dp+数论分块,1561D1 - Up the Strip

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1561D1 - Up the Strip (simplified version) 二、解题报告 1、思路分析 一眼dp 写出dp方程: 前者维护前缀和即可O(1)转移 后者呢?——整除分块数论分块问题-CSDN博客 简单叙述下…

Mongodb的数据库简介、docker部署、操作语句以及java应用

Mongodb的数据库简介、docker部署、操作语句以及java应用 本文主要介绍了mongodb的基础概念和特点,以及基于docker的mongodb部署方法,最后介绍了mongodb的常用数据库操作语句(增删改查等)以及java下的常用语句。 一、基础概念 …

Technart电动螺丝刀TN101控制器维修

Technart电动螺丝刀以其高效、稳定和精确的扭矩控制而闻名。然而,即使优质的产品,在长时间的使用下,也可能会出现TECHNART电动螺母扳手控制器故障。 常见故障及维修方法 1. 控制器不工作 症状:电动螺丝刀无法启动,或启…

sql注入-布尔盲注

布尔盲注(Boolean Blind SQL Injection)是一种SQL注入攻击技术,用于在无法直接获得查询结果的情况下推断数据库信息;它通过发送不同的SQL查询来观察应用程序的响应,进而判断查询的真假,并逐步推断出有用的信…

数据库与数据库管理系统 MySQL的安装 SQL语言学习:DDL、DML

day51 数据库 数据库(database)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。 通过数据库管理系统,可以有效地组织和管理存储在数据库中的数据,如数据库管理系统MySQL 数据…