Сценарий Python, чтобы увидеть, если файл был создан сегодня, отправьте письмо с результатами - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь создать скрипт на python, который проверяет, был ли файл создан сегодня в паре каталогов linux, и, если они были созданы, отправьте электронное письмо группе рассылки с именем созданных файлов. Если это не так, отправьте электронное письмо с указанием, что файлы не были созданы сегодня. У меня проблемы с моим текущим кодом, чтобы я мог извлечь фактическое имя / дату файла и отправить его в своем отчете по электронной почте.

Это сервер Linux, работающий на Python 2.7.5

import datetime as dt
import os
import smtplib

today = dt.datetime.now().date()

for file in os.listdir('/gma/cache/completed'):
    filetime = dt.datetime.fromtimestamp(
            os.path.getctime('/gma/cache/completed' + file))
    print(filetime)
    if filetime.date() == today:
        SERVER = 'smtp.gmail.com'
        FROM = 'llara@abc.com'
        TO = ['generic@gmail.com']

        SUBJECT = 'gma reporting.. '
        TEXT = ''

        message =  """From: %s\r\nTo: %s\r\nSubject: %s\r\n\

        %s
        """ % (FROM, ", ".join(TO), SUBJECT, TEXT)

        server = smtplib.SMTP(SERVER)
        server.login('user', "PASSWORD")
        server.sendmail(FROM, TO, message)
        server.quit()

В настоящее время я ожидаю одобрения для тестирования этого в среде песочницы, и я хотел бы получить некоторые отзывы.

1 Ответ

1 голос
/ 03 июля 2019

Проверить это сообщение .Использование os.path.getmtime даст вам измененное время, но использование os.path.getctime не похоже на работу в Linux.

Похоже, у вас может быть ошибка здесь:

filetime = dt.datetime.fromtimestamp(
            os.path.getctime('/gma/cache/completed' + file))

Вашos.path.getctime(... кусок добавляет file к пути без разделителя файлов.Попробуйте использовать os.path.join вместо простой конкатенации строк.

Небольшая обратная связь: я хотел бы рассмотреть факторизацию ваших константных определений вне вашей функцииНапример, объявите SERVER = 'smtp.gmail.com' прямо под вашими импортами в вашем модуле.

Подумайте об использовании with для ваших вызовов SMTP.Так что это будет примерно так:

with smtplib.SMTP(SERVER) as s:
    server.login('user', "PASSWORD")
    ...

Я бы также подумал об использовании модуля электронной почты Python , хотя для чего-то настолько простого, что это может быть излишним.

Некоторые высокие-уровень обратной связи с более «питонской» организацией:

Я бы поместил ваш код в функцию с именем main (или что-то еще, что вы считаете наиболее полезным), а затем создал бы блок if __name__ == '__main__': внизу,который затем вызывает вашу функцию main.Поскольку ваш сценарий / программа неизбежно растет, это позволит другим модулям импортировать из этого модуля без выполнения всего кода.

Наконец, я бы настоятельно поощрял использование виртуальной среды насервер.Предположительно это сервер RedHat (так как он работает на Python 2.7.5).Я попал в плохую ситуацию, используя системную установку Python - вы можете быстро оказаться в сломанной системе, как только вам понадобится установить пакет. Вот полезное руководство о виртуальных средах в Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...