0

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

跟踪目录创建的最高效方式(在 Windows 7 上)是什么?

4

2 回答 2

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']

你只需要根据你的时间步长、时间显示等来调整它。

于 2013-04-18T16:48:57.113 回答
0

使用pywin32连接到 windows api。然后使用其中一个更改通知在更改发生时获取更改。这在 python 中会很痛苦,但它将是监视目录更改的最高效方式。请注意,这仅适用于本地文件系统,不适用于网络文件系统。

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

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

于 2013-04-18T16:56:04.610 回答