Добавить отправку электронной почты с указанным интервалом в скрипт Python

У меня есть два скрипта Python, которые работают независимо друг от друга. Один записывает некоторые данные в файл журнала, а другой отправляет электронное письмо на указанный адрес электронной почты. Мне нужно объединить эти два сценария вместе, чтобы электронное письмо отправляло файл журнала с заданным интервалом.

Мне удалось заставить оба скрипта работать самостоятельно, но я не уверен, как объединить их в один рабочий скрипт.

сценарий 1

def get_titles():
    current_title = None
    while True:
        moment2 = datetime.datetime.now().strftime("%d-%b-%Y [ %H:%M:%S ]")
        new_title = GetWindowText(GetForegroundWindow())
        if new_title != current_title:
           if len(new_title) > 0:
                #logging.info(" Moved to : " + new_title)
                current_title = new_title
                time.sleep(0.1)
                #print(new_title)
                ff= (moment2 + " : " +  "Moved T0 : "+ new_title + '\n')
                #print (ff)
                with open('logfile.txt', 'a+') as f:
                  f.write(ff)

сценарий 2

body = "Please see attatched file for info"
msg.attach(MIMEText(body, 'plain'))

filename = "logfile.txt"
attachment = open("logfile.txt", "rb")

part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition',"attachment; filename= "+filename)

msg.attach(part)

server = smtplib.SMTP('smtpname', 587)
server.starttls()
server.login(fromaddr, password)
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()

person K.Meleo    schedule 29.12.2018    source источник
comment
мне удалось заставить его работать с помощью threading.Timer(300, send_msg).start(). Но теперь небольшая проблема: как только скрипт запускается, он отправляет пустой файл журнала на электронную почту, прежде чем какие-либо подробности будут зарегистрированы, но после 300-секундного интервала он отправит файл журнала с добавленной информацией. есть ли способ остановить отправку первого пустого файла?   -  person K.Meleo    schedule 29.12.2018


Ответы (1)


Создать 2 класса, а затем вызвать соответствующие методы? Ниже приведен примерный шаблон.

class LogData:
    def __init__():
        print("Initilized!")

    def get_titles():
        #write to log file
        ...
        ...
        ...
        return log_file_name

class SendEmail:
    def __init__(data_file):
        self.data_file = data_file

    def send_email():
        #read self.data_file and send email
        ...
        ...
        ...

if __name__ == '__main__':
    log = LogData()
    log_file = log.get_titles()
    email_handler = SendEmail(log_file)
    email_handler.send_email()
person Chankey Pathak    schedule 29.12.2018
comment
Я добавил сценарий электронной почты в тот же файл сценария регистрации, так будет ли это проще, чем вызывать другой файл self.data_file? как можно было бы отправлять электронное письмо, скажем, каждый час? - person K.Meleo; 29.12.2018