我正在尝试创建一个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()
我目前正在等待批准,可以在沙盒环境中对其进行测试,我希望获得一些反馈。
答案 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虚拟环境中。