【问题标题】:What is the best way to send python console output as email from within the script?从脚本中将 python 控制台输出作为电子邮件发送的最佳方法是什么?
【发布时间】:2015-10-19 06:18:15
【问题描述】:

我有一个 python 脚本,它可以执行多项操作并在控制台上打印日志。目前,我还没有使用任何日志记录机制(我只是使用print 打印所需的消息)如何获取所有打印件并将其作为电子邮件发送出去?我是否必须将其全部保存在变量中并将其传递给 smtplib?还是有更好的方法?

示例代码

for job in fetch.getJobStats():
        if job['userName']+"_"+job['tenantId'] in summaryTotal:
            summary = summaryTotal[job['userName']+"_"+job['tenantId']]
        else:
            summary = Summary(job['userName'], job['tenantId'])
            summaryTotal[summary.user+"_"+summary.tenant] = summary

        summary.jobs.append(Job(job['jobId'], job['jobStatus'], int(job['fileSize'])))
        totalBw += int(job['fileSize'])

    print("Cumulative Size: " + str(totalBw))
    for summaryKey in summaryTotal.keys():
        summary = summaryTotal[summaryKey]

        inprogress = []
        failed = []
        completed = []
        cancelled = []
        totalBwTenantUser = 0

        for job in summary.jobs:
            totalBwTenantUser += job.filesize
            if job.status == "JOBCANCELLED":
                cancelled.append(job.id)
            elif job.status == "JOBCOMPLETED":
                completed.append(job.id)
            elif job.status == "INPROGRESS":
                completed.append(job.id)
            elif job.status == "JOBFAILED":
                completed.append(job.id)

        print("-" * 50)
        print("Tenant: " + summary.tenant)
        print("User  : " + summary.user)
        print("Size    : " + str(totalBwTenantUser))
        print("\n")
        print("INPROGRESS: " + str(inprogress))
        print("COMPLETED : " + str(completed))
        print("CANCELLED : " + str(cancelled))
        print("FAILED    : " + str(failed))
        print("-" * 50)

所有照片都应从电子邮件中拍摄。

【问题讨论】:

  • 请发布您的代码和保存方式,有人可以帮助您发送电子邮件

标签: python smtplib


【解决方案1】:

你真的应该使用 Python 自带的出色的logging system

将它与mailinglogger 处理程序结合使用,您将拥有所需的一切:

import logging

from mailinglogger.SummarisingLogger import SummarisingLogger

handler = SummarisingLogger('from@example.com',
                            ('to@example.com',),
                            subject='[LOGS] %s (hostname)s',
                            mailhost='smtp.example.com')

logging.basicConfig(format='%(asctime)s %(message)s',
                    datefmt='%m/%d/%Y %I:%M:%S %p',
                    level=logging.INFO)
logger = logging.getLogger()
logger.addHandler(handler)

logging.info('Sent by email.')

【讨论】:

  • 感谢您的快速回答!会试试这个
  • 错误:找不到与 SummarisingLogger 匹配的发行版,如何安装?
【解决方案2】:

我会使用logging 库,将日志记录配置到一个文件中,然后只需读取该文件的内容并将其发送或将日志文件直接附加到您发送的电子邮件中(请参阅How to send email attachments with Python)。

【讨论】:

  • python looging 库还提供了一个SMTPHandler。您可以使用它来发送邮件,而不是直接附加您的日志文件。
  • 谢谢,我不知道!
猜你喜欢
  • 2011-08-25
  • 1970-01-01
  • 2010-10-21
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 2015-12-29
相关资源
最近更新 更多