Python脚本查看今天是否创建了文件,并发送带有结果的电子邮件

时间:2019-07-03 15:09:05

标签: python linux automation smtp

我正在尝试创建一个python脚本,以检查是否今天在几个linux目录中创建了文件,如果已创建,请向通讯组发送一封电子邮件,其中包含已创建文件的名称。如果不是,请发送电子邮件说明文件不是今天创建的。我在使用当前代码时遇到麻烦,无法提取实际的文件名/日期并将其发送到我的电子邮件报告中。

这是运行Python 2.7.5的Linux服务器

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 个答案:

答案 0 :(得分:1)

签出this post。使用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的email module,尽管对于某些简单的操作来说可能会适得其反。

有关“ Pythonic”组织的一些高级反馈:

我会将您的代码放在称为main的函数(或您认为最有用的函数)中,然后在底部创建一个if __name__ == '__main__':块,然后调用您的main函数。随着脚本/程序不可避免地增长,这将允许其他模块从此模块导入而无需运行所有代码。

最后,我会强烈鼓励在服务器上使用虚拟环境。大概是RedHat服务器(因为它正在运行Python 2.7.5)。使用系统的Python安装让我陷入了困境–一旦需要安装软件包,您很快就会发现系统损坏了。 Here's a handy guide在Python虚拟环境中。