前言:这是我关于堆栈溢出的第一篇文章,所以请原谅我在任何时候都没有遵循正确的惯例,如何正确地向社区提出问题/链接到我收到指导的其他堆栈溢出文章
我被分配了一个工作项目,其中需要监控目录的任何更改,一旦发生操作,将生成一封电子邮件并发送给管理目录的相关方
利用Tim Golden's Python Stuff: Watch a Directory for Changes(稍加修改)和一篇题为How to Get the Last Modified Date of a File in Python的帖子,我已经能够利用Python拼凑出一些代码来持续监视目录,并成功地返回发生的操作,其中带有上次修改目录时的相应时间戳(时间戳没有细化到能够捕捉每个动作的准确时间,而是将文件夹中最后一个动作的时间归因于所有不理想的动作)
关于如何在任何操作发生时处理触发自动电子邮件通知(利用MS outlook)的下一步操作,我被卡住了
我一直在浏览该网站,并看到可能的解决方案,即:Email notification on file change in particular directory with Python然而,我希望有一个解决方案可以与我现有的代码一起工作
如有任何见解、建议或指导,将不胜感激。提前感谢
以下是我目前的情况:
import os
import win32file
import win32con
from datetime import datetime
lastmodified= os.stat("generic path of directory").st_mtime
timestamp = (datetime.fromtimestamp(lastmodified))
ACTIONS = {
1 : "FILE_ACTION_ADDED",
2 : "FILE_ACTION_REMOVED",
3 : "FILE_ACTION_MODIFIED",
4 : "FILE_ACTION_RENAMED_OLD_NAME",
5 : "FILE_ACTION_RENAMED_NEW_NAME",
8 : "FILE_NOTIFY_CHANGE_SIZE",
10 : "FILE_NOTIFY_CHANGE_LAST_WRITE",
20 : "FILE_NOTIFY_CHANGE_CREATION",
40 : "FILE_NOTIFY_CHANGE_CREATION",
100 : "FILE_NOTIFY_CHANGE_SECURITY"
}
# Thanks to Claudio Grondi for the correct set of numbers
FILE_LIST_DIRECTORY = 0x0001
path_to_watch = "generic path of directory"
hDir = win32file.CreateFile (
path_to_watch,
FILE_LIST_DIRECTORY,
win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE | win32con.FILE_SHARE_DELETE,
None,
win32con.OPEN_EXISTING,
win32con.FILE_FLAG_BACKUP_SEMANTICS,
None
)
while 1:
#
# ReadDirectoryChangesW takes a previously-created
# handle to a directory, a buffer size for results,
# a flag to indicate whether to watch subtrees and
# a filter of what changes to notify.
#
# NB Tim Juchcinski reports that he needed to up
# the buffer size to be sure of picking up all
# events when a large number of files were
# deleted at once.
#
results = win32file.ReadDirectoryChangesW (
hDir,
1024,
True,
win32con.FILE_NOTIFY_CHANGE_FILE_NAME |
win32con.FILE_NOTIFY_CHANGE_DIR_NAME |
win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES |
win32con.FILE_NOTIFY_CHANGE_SIZE |
win32con.FILE_NOTIFY_CHANGE_LAST_WRITE |
win32con.FILE_NOTIFY_CHANGE_SECURITY,
None,
None
)
for action, file in results:
full_filename = os.path.join (path_to_watch, file)
print (full_filename, ACTIONS.get (action, "Unknown"),timestamp)
目前没有回答
相关问题 更多 >
编程相关推荐