我正在尝试使用以下代码来查看更改文件夹,并在检查文件大小最近没有增加时将文件名(最好是完整路径)作为字符串返回,以停止其余的脚本检查不完整的文件。 我在将文件大小定时器函数发送到文件名时遇到了困难,因为我正在将检测到的文件作为列表收集。 如果我正在吠叫错误的树,请随时告诉我,并感谢您的帮助!
斯图尔特
import os, time
def watch(path_to_watch):
before = dict ([(f, None) for f in os.listdir (path_to_watch)])
while watch_active == 1:
time.sleep (10)
after = dict ([(f, None) for f in os.listdir (path_to_watch)])
added = [f for f in after if not f in before]
removed = [f for f in before if not f in after]
if added:
filesizechecker(added)
return added
if removed:
print "Removed: ", ", ".join (removed)
before = after
def filesizechecker(filepath):
# Checks filesize of input file and
# returns 1 when file hasn't changed for 3 seconds
fnow = open(filepath, "rb")
fthen = 1
while fnow != fthen:
time.sleep(3)
fthen = len(f.read())
watch_active = 1
watch("/home/stewart/Documents")
答案 0 :(得分:0)
您还可以查看lsof
的工作原理。它列出了打开的文件。如果您正在观看(或想要)的文件未打开,则它也不可能被更改。
您使用的是Linux,因此您可以随时查看/ proc文件系统以获取有关进程和文件的信息。
我不知道细节,所以天气好,你觉得这个想法值得花时间:)
答案 1 :(得分:0)
我做了一些研究,发现pyinotify库更适合我的需要。
具体而言,IN_CLOSE_WRITE
事件代码在应用程序(在我的情况下,文件副本)关闭可写文件时返回。