如何让python脚本每24小时自动运行一次

时间:2017-03-28 17:50:48

标签: python excel smtp scheduler

我有一个python脚本test.py,它每24小时发送一封包含excel附件的电子邮件。但是,有没有办法使自动化更多,即使我关闭终端使这个过程始终在后台运行,这样我就不必每天都启动它,从而否定了自动化的全部目的?

import smtplib,email,email.encoders,email.mime.text,email.mime.base
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email import encoders
from email.message import Message
from email.mime.audio import MIMEAudio
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import schedule
import time

def job():
    msg = MIMEMultipart()
    # me == my email address
    # you == recipient's email address
    me = "abc@gmail.com"
    you = "xyz@gmail.com"
    password ='passwork'


    # Create message container - the correct MIME type is multipart/alternative.
    msg = MIMEMultipart('mixed')
    msg['Subject'] = "Automation Testing"
    msg['From'] = me
    msg['To'] = you

    # Create the body of the message (a plain-text and an HTML version).
    text = "Hi\n\nPlease find attached the weekly report."


    part1 = MIMEText(text, 'plain')

    #attach an excel file:
    fp = open('/Users/excelsheet.xlsm', 'rb')
    file1=email.mime.base.MIMEBase('application','vnd.ms-excel')
    file1.set_payload(fp.read())
    fp.close()
    email.encoders.encode_base64(file1)
    file1.add_header('Content-Disposition','attachment;filename=anExcelFile.xlsx')

    # Attach parts into message container.
    # According to RFC 2046, the last part of a multipart message, in this case
    # the HTML message, is best and preferred.

    msg.attach(part1)
    msg.attach(file1)

    composed = msg.as_string()

    fp = open('msgtest.txt', 'w')
    fp.write(composed)

    # Credentials (if needed)  
    # The actual mail send  
    server = smtplib.SMTP('smtp.gmail.com', 587)  
    server.starttls()  
    server.login('abc@gmail.com', password)
    server.sendmail(me, you, composed)  
    server.quit()  
    fp.close()

schedule.every().minutes.do(job)
schedule.every(24).hour.do(job)
schedule.every().day.at("10:30").do(job)

while 1:
    schedule.run_pending()
    time.sleep(1)

0 个答案:

没有答案