# -*- coding: UTF-8 -*- """提供错误报告的基本操作及方法 顺便提供版本更新、安装库等功能""" # 诸葛亮与八卦阵帮忙修改语法 日期:---2022年1月19日 # 统计:致命(三级)错误:0个;警告(二级)错误:1个;语法(一级)错误:72个 import os import zipfile def makeZip(sourceDir, outFilename, compression=8, exceptFile=None): """使用compression指定的算法打包目录为zip文件\n 默认算法为DEFLATED(8),可用算法如下:\n STORED = 0\n DEFLATED = 8\n BZIP2 = 12\n LZMA = 14\n """ zipf = zipfile.ZipFile(outFilename, 'w', compression) pre_len = len(os.path.dirname(sourceDir)) for parent, dirnames, filenames in os.walk(sourceDir): for filename in filenames: if filename == exceptFile: continue print(filename) pathfile = os.path.join(parent, filename) arcname = pathfile[pre_len:].strip(os.path.sep) # 相对路径 zipf.write(pathfile, arcname) zipf.close() del zipf, pre_len # 以上函数节选并修改自 正在攀登的小蜗牛 的博客:https://blog.csdn.net/qq_21127151/article/details/107503942 class report: """发送报告以及相应的任务处理""" def __init__(self, senderName: str = 'Unknown', senderContact: str = 'None', describetion: str = ''): """:param senderName 发送者名称 :param senderContact 发送者联系方式 :param describetion 问题描述""" self.senderName = senderName self.senderContact = senderContact self.describetion = describetion if not self.senderName: self.senderName = 'Unknown' if not self.senderContact: self.senderContact = 'None' def emailReport(self): """使用E-mail方法发送当前的日志和临时文件等""" import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header from nmcsup.log import log log("发送错误报告") import os log("添加标题与正文") msg = MIMEMultipart() # 发送者与接收者显示名称 msg["From"] = Header(self.senderName, 'utf-8') msg["To"] = Header("W-YI (QQ2647547478)", 'utf-8') # 标题 msg["Subject"] = '音·创 - 来自 ' + self.senderName + ' 的错误报告' # 正文 msg.attach( MIMEText("来自" + self.senderName + "( " + self.senderContact + " )的错误描述:\n" + self.describetion, 'utf-8')) log("添加完毕,正在生成压缩包...") makeZip("./", "Temps&Logs.zip", exceptFile="Temps&Logs.zip") attafile = MIMEText(str(open("Temps&Logs.zip", 'rb').read()), "base64", 'gb2312') attafile["Content-Type"] = 'application/octet-stream' attafile["Content-Disposition"] = 'attachmentfilename="BugReport_from_' + self.senderName + '.zip"' msg.attach(attafile) log("完毕,准备发送") try: smtp = smtplib.SMTP() smtp.connect("smtp.163.com") # smtp.login("RyounDevTeam@163.com","RyounDaiYi99") # SIQQKQQYCZRVIDFJ是授权密码 smtp.login("RyounDevTeam@163.com", "SIQQKQQYCZRVIDFJ") smtp.sendmail("RyounDevTeam@163.com", ["RyounDevTeam@163.com", ], msg.as_string()) log("错误汇报邮件已发送") except smtplib.SMTPException as e: log("错误汇报邮件发送失败:\n" + str(e)) log("清空内存和临时文件") del msg, attafile os.remove("./Temps&Logs.zip") class version: libraries = ( 'mido', 'amulet', 'amulet-core', 'amulet-nbt', 'piano_transcription_inference', 'pypinyin', 'pyinstaller', 'py7zr', 'websockets', 'torch') """当前所需库,有一些是开发用的,用户不需要安装""" version = ('0.0.1', 'Delta',) """当前版本""" def __init__(self) -> None: self.libraries = version.libraries """当前所需库,有一些是开发用的,用户不需要安装""" self.version = version.version """当前版本""" def installLibraries(self): """安装全部开发用库""" from sys import platform import os if platform == 'win32': import shutil try: shutil.rmtree(os.getenv('APPDATA') + '\\Musicreater\\') except FloatingPointError: pass for i in self.libraries: print("安装库:" + i) os.system("python -m pip install " + i + " -i https://pypi.tuna.tsinghua.edu.cn/simple") elif platform == 'linux': os.system("sudo apt-get install python3-pip") os.system("sudo apt-get install python3-tk") os.system("sudo apt-get install python3-tkinter") for i in self.libraries: print("安装库:" + i) os.system("sudo python3 -m pip install " + i + " -i https://pypi.tuna.tsinghua.edu.cn/simple")