内容简介:文章目录有一天,你眼疾手快写好了一个Python程序来处理大批量的任务,然后信心满满地点击“Run”按钮,想着任务量巨大,可能需要计算机处理一段时间,于是带着还未消散的成就感,约上了三五好友把酒言欢……举杯邀明月,对饮成三人,把酒言欢后,全都没干成。
文章目录
一、前言
有一天,你眼疾手快写好了一个 Python 程序来处理大批量的任务,然后信心满满地点击“Run”按钮,想着任务量巨大,可能需要计算机处理一段时间,于是带着还未消散的成就感,约上了三五好友把酒言欢……
举杯邀明月,对饮成三人,把酒言欢后,全都没干成。
由于一个未知的异常,程序在运行不久后就挂掉了…………掉了…………了,在你把酒言欢的这段时间里,你以为计算机在埋头苦干,实则在闭目养神。
这时的你追悔莫及,恨不得给自己两耳巴子,但是真打自己是不可能的了,只能继续完善代码。除了对异常进行了处理,还加上了提醒功能,以便程序第一时间出状况的时候你能够知道。
二、邮件提醒
对程序加入提醒功能可以有很多种方式,比如短信、QQ消息、微信消息、邮件、飞信等等。
最及时的,当然是短信了,但是发送短信可能需要购买短信服务,对于个人而言并不是很划算。
QQ、微信、飞信等聊天软件也很不错,但是对接这些软件稍显麻烦,所以最后我们选择经典的电子邮件作为程序异常的提醒方式。
在Python中,已经有内置库支持电子邮件的发送和接收。其中:
- 接收邮件使用poplib和imaplib这两个库;
- 发送邮件使用smtplib这个库。
这3个库的具体使用方法在此就不做详细介绍,Python的官方文档里面已经有说明。
下面我们直接来编写这个邮件提醒函数。
三、代码实践
首先,我们引入所需的库:
import smtplib from email.mime.text import MIMEText import datetime import traceback
其中:
- smtplib:用于发送电子邮件;
- MIMEText:用于处理电子邮件的正文内容;
- datetime:用于获取时间;
- traceback:用于获取异常的信息;
接着,创建一个名为send_email的函数,接收3个参数name,ex和ex_detail。
def send_email(name,ex,ex_detail): ''' :param name:程序名 :param ex: 异常名 :param ex_detail: 异常详情 :return: '''
在函数内定义一个变量now_time,赋值为当前的时间:
now_time = datetime.datetime.strftime(datetime.datetime.today(), "%Y-%m-%d %H:%M:%S:%f") # 当前时间
在函数内定义电子邮箱相关变量:
msg_from = 'xxx@xxxxxx.com' # 发件人邮箱 passwd = '666666' # 发件人邮箱密码 msg_to = '你自己的邮箱' # 收件人邮箱 s = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465) # 发件箱邮件服务器及端口号
继续在函数内定义邮件内容相关的变量,为了让邮件的正文更加地美观,我们使用HTML格式的文本作为内容:
subject = "【程序异常提醒】{name}-{date}".format(name=name, date=now_time) #标题 content = '''<div class="emailcontent" style="width:100%;max-width:720px;text-align:left;margin:0 auto;padding-top:80px;padding-bottom:20px"> <div class="emailtitle"> <h1 style="color:#fff;background:#51a0e3;line-height:70px;font-size:24px;font-weight:400;padding-left:40px;margin:0">程序运行异常通知</h1> <div class="emailtext" style="background:#fff;padding:20px 32px 20px"> <p style="color:#6e6e6e;font-size:13px;line-height:24px">程序:<span style="color:red;">【{name}】</span>运行过程中出现异常错误,下面是具体的异常信息,请及时核查处理!</p> <table cellpadding="0" cellspacing="0" border="0" style="width:100%;border-top:1px solid #eee;border-left:1px solid #eee;color:#6e6e6e;font-size:16px;font-weight:normal"> <thead> <tr> <th colspan="2" style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;background:#f8f8f8">爬虫异常详细信息</th> </tr> </thead> <tbody> <tr> <td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;width:100px">异常简述</td> <td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px">{ex}</td> </tr> <tr> <td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center">异常详情</td> <td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px">{ex_detail}</td> </tr> </tbody> </table> </div> </div> </div> '''.format(ex=ex, ex_detail=ex_detail, name=name) # 正文 msg = MIMEText(content, _subtype='html', _charset='utf-8') msg['Subject'] = subject msg['From'] = '程序小助手<xxx@xxxxxxxxxx.com>' msg['To'] = msg_to
最后登录邮箱并发送邮件:
try: s.login(msg_from, passwd) s.sendmail(msg_from, msg_to, msg.as_string()) print("发送成功") except smtplib.SMTPException as e: print("发送失败") finally: s.quit()
这样,我们的Python程序异常邮件提醒小功能就实现了。
为了看看效果,我们来试验一下:
if __name__ == '__main__': # 示例 try: a = int("哈哈哈") except Exception as e: print(traceback.format_exc()) send_email(name='州的先生程序测试', ex=repr(e), ex_detail=traceback.format_exc())
很快的,就收到了新邮件的提醒了:
打开邮件看看,异常时间、名称、异常详情一应俱全:
怎么样是不是很简单,欢迎留言讨论~
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- SSL证书到期时间监控提醒工具+脚本推荐
- 搭建一个SSL证书过期检测提醒服务器
- 巡云轻论坛系统 2.2 发布,新增提醒功能
- Holer 1.0.3 发布了,支持自动邮件提醒
- Windows 7 用户已开始收到停止支持的提醒
- 重要提醒 | 手动轮换Rancher Kubernetes集群的证书
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PHP实战
Dagfinn Reiersol、Marcus Baker、Chris Shiflett / 张颖 等、段大为 审校 / 人民邮电出版社 / 2010-01 / 69.00元
“对于那些想要在PHP方面更进一步的开发者而言,此书必不可少。” ——Gabriel Malkas, Developpez.com “简而言之,这是我所读过的关于面向对象编程和PHP最好的图书。……强烈推荐此书,绝不要错过!” ——Amazon评论 “此书是理论与实践的完美融合,到目前为止,其他任何图书都无法与它相媲美。如果5颗星是满分,它完全值得10颗星!” ——A......一起来看看 《PHP实战》 这本书的介绍吧!