没有跨平台的方法来监视新文件,除了反复阅读目录并查看更改了什么,这是一个非常糟糕的主意。在
查看新文件添加到Windows文件夹的正确方法是^{}函数。*Obtaining Directory Change Notifications解释了它是如何工作的,并在C++中给出了示例代码。在
要使用Python中的这些函数,需要^{}。(您可以使用ctypes或其他一些较低级别的技术,但是没有很好的理由这样做。)文档在包中的一个.chm文件中,或者您可以找到它们的副本at ActiveState。您需要的函数在^{}模块中。在
如果您搜索Python FindFirstChangeNotification,您可能会找到许多示例代码。但它看起来像这样(不完整的未经测试的代码只是为了让您开始使用):ffc = win32api.FindFirstChangeNotification(path, 0,
win32con.FILE_NOTIFY_CHANGE_FILE_NAME)
last_contents = set(os.listdir(path))
while True:
win32event.WaitForSingleObject(ffc, win32con.INFINITE)
contents = set(os.listdir(path))
new_files = contents - last_contents
for file in new_files:
run_your_script_that_prints_a_file(file)
last_contents = contents
win32api.FindNextChangeNotification(ffc)
在实际的代码中,您可能需要一些更好的错误处理,并且在完成后您会希望FindCloseChangeNotification(ffc)。在
*还有一个^{},它在C语言中更容易使用,而且更灵活,不需要每次更改都手动列出目录……但实际上使用Python更痛苦,而且提供的示例代码也更少。在