2015-10-19 85 views
3

我有一個python腳本,可以執行多項操作並在控制檯上打印日誌。現在,我還沒有使用任何日誌記錄機制(我只是使用print打印了所需的信息)。如何將所有打印件作爲電子郵件發送出去?我必須將它全部保存在一個變量中,並將它傳遞給smtplib?或者,還有更好的方法?從腳本內部發送python控制檯輸出爲電子郵件的最佳方式是什麼?

示例代碼

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) 

所有印刷品應該出手了一封電子郵件。

+0

請發佈您的代碼和您保存它們的方式,並且有人可以幫助您發送電子郵件 – MohitC

回答

5

你真的應該使用Python自帶的優秀logging system

mailinglogger處理器結合起來,你有你需要的一切:

import logging 

from mailinglogger.SummarisingLogger import SummarisingLogger 

handler = SummarisingLogger('[email protected]', 
          ('[email protected]',), 
          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.') 
+0

感謝您的快速回答!將試試 – abhidoeslinux

2

我會用logging庫,配置日誌記錄到文件,然後只是讀取文件的內容,並將其發送或附加日誌文件直接發送到您要發送的電子郵件(請參閱How to send email attachments with Python)。

+1

python looging庫還提供了一個[SMTPHandler](https://docs.python.org/2/library/logging.handlers.html#smtphandler)。您可以使用它來發送郵件,而不是直接附加您的日誌文件。 – shanmuga

+0

謝謝,我不知道! – gplayer

相關問題