2024-10-03 21:31:05 发布
网友
我有一个python脚本,它运行在Ubuntu上并处理MySQL数据库的内容。当脚本运行到未处理的exception或完成处理时,我希望得到通知。在
exception
怎样才能做到这一点?
我想用this SO-Answer中所示的方法从python内部给自己发送一封电子邮件,但要做到这一点,我必须硬编码我的loginda—这是我不习惯的(脚本在公司内部的公共服务器上运行)。在
有什么建议可以绕过这个问题,或者用更合适的方式来实现呢?在
通过SMTP发送电子邮件时,通常不需要提供登录数据。如果我是你,我会用你链接到的答案中给出的代码进行实验,然后在你公司的SMTP服务器上试用。在
这是我编写并使用的一个异常处理程序,它在脚本终止时向异常发送电子邮件。用sys.excepthook = ExceptHook设置它:
sys.excepthook = ExceptHook
import os import sys import traceback import re import smtplib import getpass def ExceptHook(etype, value, tb): """Formats traceback and exception data and emails the error to me: &^&^@&^&^&.com. Arguments: etype -- Exception class type value -- Exception string value tb -- Traceback string data """ excType = re.sub('(<(type|class \')|\'exceptions.|\'>|__main__.)', '', str(etype)).strip() Email = {'TO':"*****@*****.com", 'FROM':getpass.getuser() + '@blizzard.com', 'SUBJECT':'** Exception **', 'BODY':'%s: %s\n\n' % (excType, etype.__doc__)} for line in traceback.extract_tb(tb): Email['BODY'] += '\tFile: "%s"\n\t\t%s %s: %s\n' % (line[0], line[2], line[1], line[3]) while 1: if not tb.tb_next: break tb = tb.tb_next stack = [] f = tb.tb_frame while f: stack.append(f) f = f.f_back stack.reverse() Email['BODY'] += '\nLocals by frame, innermost last:' for frame in stack: Email['BODY'] += '\nFrame %s in %s at line %s' % (frame.f_code.co_name, frame.f_code.co_filename, frame.f_lineno) for key, val in frame.f_locals.items(): Email['BODY'] += '\n\t%20s = ' % key try: Email['BODY'] += str(val) except: Email['BODY'] += '<ERROR WHILE PRINTING VALUE>' thisHost = socket.gethostname() thisIP = socket.gethostbyname(thisHost) gmTime = time.gmtime() logName = 'SomeTool_v%s_%s_%s_%s.%s.%s_%s.%s.%s.log' % (__version__, thisHost, thisIP, gmTime.tm_mon, gmTime.tm_mday, gmTime.tm_year, gmTime.tm_hour, gmTime.tm_min, gmTime.tm_sec) if not os.path.exists(LOGS_DIR): try: os.mkdir(LOGS_DIR) except: baseLogDir = os.path.join(NET_DIR, "logs") if not os.path.exists(baseLogDir): try: os.mkdir(baseLogDir) except: pass else: open(os.path.join(baseLogDir, logName), 'w').write(Email['BODY']) else: open(os.path.join(LOGS_DIR, logName), 'w').write(Email['BODY']) Email['ALL'] = 'From: %s\nTo: %s\nSubject: %s\n\n%s' % (Email['FROM'], Email['TO'], Email['SUBJECT'], Email['BODY']) server = smtplib.SMTP(MY_SMTP) server.sendmail(Email['FROM'], Email['TO'], Email['ALL']) server.quit() if __name__ == '__main__': sys.excepthook = ExceptHook try: 1 / 0 except: sys.exit()
这是一种魅力:https://www.quora.com/How-can-I-send-a-push-notification-to-my-Android-phone-with-a-Python-script
在PC上:安装通知我
pip install notify-run
然后注册为:notify-run register
notify-run register
现在在你的手机上扫描代码并允许来自这个网站的通知。在
然后脚本可以这样通知您:
通过SMTP发送电子邮件时,通常不需要提供登录数据。如果我是你,我会用你链接到的答案中给出的代码进行实验,然后在你公司的SMTP服务器上试用。在
这是我编写并使用的一个异常处理程序,它在脚本终止时向异常发送电子邮件。用
sys.excepthook = ExceptHook
设置它:这是一种魅力:https://www.quora.com/How-can-I-send-a-push-notification-to-my-Android-phone-with-a-Python-script
在PC上:安装通知我
然后注册为:
notify-run register
现在在你的手机上扫描代码并允许来自这个网站的通知。在
然后脚本可以这样通知您:
^{pr2}$相关问题 更多 >
编程相关推荐