我正在尝试编写一个监视文件夹的脚本,如果该文件夹中添加了一个文件,请处理该文件,然后将其移动到DONE文件夹。
我想我想使用while循环...我会用以下内容监视文件夹:
count = len(os.listdir('/home/lou/Documents/script/txts/'))
while (count = 1):
print Waiting...
我希望脚本每隔30秒检查一次len(),如果它从1变为2,则运行脚本,否则等待30秒并检查len()。该脚本将新文件移动到一个文件夹,len()将返回1.脚本将全天候运行。
非常感谢任何帮助
感谢
娄
答案 0 :(得分:6)
根据目录的大小,如果目录的mtime已更改,则最好只检查文件的数量。如果您使用的是Linux,您可能也对inotify感兴趣。
import sys
import time
import os
watchdir = '/home/lou/Documents/script/txts/'
contents = os.listdir(watchdir)
count = len(watchdir)
dirmtime = os.stat(watchdir).st_mtime
while True:
newmtime = os.stat(watchdir).st_mtime
if newmtime != dirmtime:
dirmtime = newmtime
newcontents = os.listdir(watchdir)
added = set(newcontents).difference(contents)
if added:
print "Files added: %s" %(" ".join(added))
removed = set(contents).difference(newcontents)
if removed:
print "Files removed: %s" %(" ".join(removed))
contents = newcontents
time.sleep(30)
答案 1 :(得分:2)
等待30秒
import time # outside the loop
time.sleep(30)
答案 2 :(得分:0)
这是一个通用的解决方案,在调用时,将等待FOREVER,直到修改了传递的目录。可以在任何可以对目录执行操作的代码之前调用此函数,例如计算多少个文件等。它可以用来阻止执行,直到dir被修改:
def directory_modified(dir_path, poll_timeout=30):
import os
import time
init_mtime = os.stat(dir_path).st_mtime
while True:
now_mtime = os.stat(dir_path).st_mtime
if init_mtime != now_mtime:
return True
time.sleep(poll_timeout)
请注意,您可以覆盖超时,默认为30秒。这是使用中的功能:
>>> att_dir = '/data/webalert/attachments'
>>> directory_modified(att_dir, 5) # Some time goes by while I modify the dir manually
True
如果在我修改目录后睡眠开始,则在最多5秒运行时间后该函数返回true。希望这能帮助那些需要通用方法的人。