我担心另一个新手问题的时间。我正在尝试使用Python 3.2.2(在这种情况下版本很重要)来监视特定的Windows路径以进行更改。最简单的方法和我正在使用的方法是:
original_state = os.listdir(path_string)
while os.listdir(path_string) == original_state:
time.sleep(1)
change_time = datetime.datetime.now()
我正在编写此代码来对另一个应用程序进行一些时序测试。考虑到这一目标,Python脚本需要(a)不会对系统性能产生负面影响,并且(b)相对精确 - +/- 1秒的误差范围是我能证明的绝对最大值。不幸的是,这种方法不符合第一个标准:当运行这个特定的代码时,虚拟环境被锤击,大大减慢了我试图准确测量其性能的操作。
我已阅读how to watch a File System for change,How do I watch a file for changes?和http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html(这篇文章被推荐为第二个SO问题的解决方案。)不幸的是,Tim Golden的代码似乎是Python 2。 x代码 - 尽我所知,Python 3不支持pywin32
模块。
在Python 3中,如何在不遇到相同性能问题的情况下监控此特定路径,我该怎么办?
答案 0 :(得分:2)
根据ActivePython 3.2 Documentation,他们的pywin32现在支持Python 3.x
答案 1 :(得分:1)
在Linux上有iNotify和pyNotify。 Windows上的类似异步通知机制是FindFirstChangeNotification function,它是FileSystemWatcher Class
的一部分请查看Tim Golden页面上的解决方案:
答案 2 :(得分:0)
还可以使用GFileMonitor监视文件或目录,Gio负责底层操作系统的详细信息。虽然,如果这是一个Windows程序,你可能不会使用Gtk。后人:
from gi.repository import Gio
gfile = Gio.file_new_for_path('/home/user/Downloads')
gfilemonitor = gfile.monitor(Gio.FileMonitorFlags.NONE, None)
gfilemonitor.connect('changed', callback_func)