【问题标题】:How do I watch a folder for changes and when changes are done using Python?如何查看文件夹的更改以及何时使用 Python 完成更改?
【发布时间】:2010-03-08 19:28:10
【问题描述】:

我需要查看传入文件的文件夹。我在以下帮助下做到了:
How do I watch a file for changes?
问题是正在移动的文件非常大(10gb) 我希望在所有文件都完成移动时收到通知。 我尝试每 20 秒比较一次文件夹的大小,但文件显示其大小正确,即使硬窗口显示它仍在移动。 我正在使用带有 python 的 windows

我找到了一个使用 open 并等待 io 异常的解决方案。 如果文件仍在移动,我会得到 errno 13。

【问题讨论】:

标签: python monitoring pywin32 watch


【解决方案1】:

你应该看看这个链接:

http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html

在那里,您可以看到您所说的方法(简单轮询)与其他两种特定于 Windows 的技术的比较,在我看来,这为您的问题提供了更好的解决方案!

否则,如果您使用的是 linux,则有 iNotify 和相关的 Python 包装器:

Pyinotify 是使用的纯 Python 模块 用于监视文件系统事件 Linux平台通过inotify

这里:http://trac.dbzteam.org/pyinotify

【讨论】:

  • 他的最后一句话说他的操作系统是Windows。
【解决方案2】:

如果您可以控制导入文件的过程,我会在开始复制文件时放置一个锁定文件,并在您完成后将其删除。锁定文件是指一个 tmp 空文件,它只是表示您正在处理文件。然后你的 py 脚本可以检查锁定文件是否存在。

【讨论】:

  • 对不起,我无法控制,但一个好主意
【解决方案3】:

您或许可以使用os.stat() 来监控文件的mtime。但是请注意,在各种网络条件下,副本可能会暂时停止,因此 mtime 会在几秒钟内不会更新,因此您需要考虑到这一点。

另一种选择是尝试以独占读/写方式打开文件,如果该文件仍被其他进程打开,则在 Windows 下应该会失败

【讨论】:

    【解决方案4】:

    最可靠的方法是编写自己的程序来移动文件。

    【讨论】:

      【解决方案5】:

      尝试在投票期间检查上次修改的时间更改而不是文件大小。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-15
        • 1970-01-01
        • 1970-01-01
        • 2015-08-12
        • 2014-11-18
        • 2015-04-26
        • 1970-01-01
        相关资源
        最近更新 更多