我正在尝试使某些服务器功能自动化以进行工作,需要您的帮助。问题是我是Python的新手,并且仅限于Python 2.7.12,无法下载Watchdog之类的外部模块。我目前在Windows上工作,我的程序如下所示:
import os, time
os.chdir("C:/Users/DummyPath")
path_to_watch = "C:/Users/DummyPath"
for f in os.listdir(path_to_watch):
before = os.stat(f).st_mtime
while True:
time.sleep(3)
for f in os.listdir(path_to_watch):
after = os.stat(f).st_mtime
if after != before and f.endswith(".doc"):
print(time.strftime("%d.%m.%Y %H:%M:%S // Updated: " + f))
before = after
我希望代码在3秒之前和之后比较f中的两个值,但是输出始终与预期不同。我该怎么办?
答案 0 :(得分:0)
在不进行过多检查的情况下,在我看来,before
被每个文件覆盖,并且始终仅包含mtime
中最后一个文件的os.listdir()
值。
但是,实际上,为什么您根本需要before
?如果您的目标是查看文件在最近3秒钟内是否已更改,则只需检查一下即可:
import time
check_interval = 3
while True:
now = time.time()
for f in os.listdir(path_to_watch):
last_mod = os.stat(f).st_mtime
if now - last_mod < check_interval: # file changed in last N seconds
print "File {} changed {} sec. ago".format(f, now - last_mod)
time.sleep(check_interval)
(我没有测试此代码,但从概念上讲应该可以)。
此外,由于您提到过您使用的是Windows,因此请注意https://docs.python.org/2/library/os.html#os.stat对stat
的以下警告:
注意,st_atime,st_mtime和 st_ctime属性取决于操作系统和文件 系统。例如,在使用FAT或FAT32文件的Windows系统上 系统,st_mtime的分辨率为2秒,st_atime的分辨率为1天 解析度。有关详细信息,请参见您的操作系统文档。
答案 1 :(得分:0)
您需要将所有文件的更新时间分别存储在字典中,最好是在字典中。尝试类似的东西:
import os, time
os.chdir("C:/Users/DummyPath")
path_to_watch = "C:/Users/DummyPath"
time_log = {}
for f in os.listdir(path_to_watch):
time_log[f] = os.stat(f).st_mtime
while True:
time.sleep(3)
for f in os.listdir(path_to_watch):
if f in time_log.keys():
after = os.stat(f).st_mtime
if after != time_log[f] and f.endswith(".doc"):
print(time.strftime("%d.%m.%Y %H:%M:%S // Updated: " + f))
time_log[f] = after
else:
print("New file: "+f)
time_log[f] = os.stat(f).st_mtime