Python脚本以查看文件是否于今天创建,并通过邮件发送结果

2024-04-19 01:30:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这是一个运行python2.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()

我目前正在等待批准在沙盒环境中测试这个,我想得到一些反馈


Tags: 文件tofromimport脚本comtodaydatetime
1条回答
网友
1楼 · 发布于 2024-04-19 01:30:42

查看this post。使用os.path.getmtime会给您修改的时间,但是在Linux上使用os.path.getctime似乎不起作用

看起来您可能有一个错误:

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

您的os.path.getctime(...工件正在将file添加到没有文件分隔符的路径中。考虑使用os.path.join,而不是简单的字符串串联

一些小的反馈:我会考虑在你的函数之外分解你的常量定义。例如,在模块中导入的正下方声明SERVER = 'smtp.gmail.com'

考虑对smtp呼叫使用with。所以应该是这样的:

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

我也会考虑使用Python的email module,尽管对于一些简单的东西来说可能有些过分

一些关于一个更具“Pythonic”组织的高层反馈:

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

最后,我强烈地鼓励在服务器上使用虚拟环境。可能这是一个RedHat服务器(因为它运行的是python2.7.5)。我在使用系统的Python安装时遇到了不好的情况——只要需要安装一个包,您就可以很快发现自己的系统坏了Here's a handy guide关于Python中的虚拟环境

相关问题 更多 >