python:如何跟踪具有子目录的目录中的新目录创建

时间:2013-04-18 16:15:49

标签: python windows directory

我想编写一个python脚本(并在后台的Windows 7上全天候运行),它检查是否在c:\ Data \或c:\ Data的子目录中创建了一个新目录(例如c :\ Data \ 1 \ 2 \ 3 \或c:\ Data \ 1 \ test \ 2)

跟踪目录创建的最佳性能(在Windows 7上)是什么?

2 个答案:

答案 0 :(得分:1)

这是一个快速扫描工具,每隔10秒扫描一次变化:

>>> import os
>>> from time import sleep
>>> def build_dir_tree(base):
    all_dirs = []
    for root, dirs, files in os.walk(base):
        for dir_ in dirs:
            all_dirs.append(os.path.join(root, dir_))
    return all_dirs

>>> base = r'E:\CFM\IT\Dev\Python\test'
>>> old_dirs = build_dir_tree(base)
>>> while True:
    new_dirs = build_dir_tree(base)
    removed = [d for d in old_dirs if d not in new_dirs]
    added = [d for d in new_dirs if d not in old_dirs]
    print 'Added :', added, '- Removed:', removed
    old_dirs = new_dirs
    sleep(10)


Added : [] - Removed: []
Added : ['E:\\CFM\\IT\\Dev\\Python\\test\\hep'] - Removed: []
Added : [] - Removed: []
Added : ['E:\\CFM\\IT\\Dev\\Python\\test\\hop\\hap'] - Removed: []
Added : [] - Removed: ['E:\\CFM\\IT\\Dev\\Python\\test\\hep']

您只需根据时间步长,时间显示等进行调整。

答案 1 :(得分:0)

使用pywin32挂钩到windows api。然后使用其中一个change notifications进行更改。这在python中会很痛苦,但它是监视目录以进行更改的最高效方法。请注意,这仅适用于本地文件系统,而不适用于网络文件系统。

你唯一的选择就是检查和睡觉,这里充满了有趣的小惊喜和边缘情况。我最喜欢的是Windows在写入文件内容之前写入文件指针 。如果有足够的时间,您将在文件存在之前“找到”该文件,并且您的所有代码都将失败。你不能在看到它之后等待一段固定的时间,因为它可能没有写完。

网络写入数百兆文件的人吗?