沒有跨平臺的方式來觀察新文件,缺乏反覆閱讀目錄並查看更改內容,這是一個非常糟糕的主意。
在Windows上添加新文件的正確方法是FindFirstChangeNotification
函數* Obtaining Directory Change Notifications解釋了它是如何工作的,並給出了C++中的示例代碼。
要使用Python中的這些函數,您需要pywin32
。 (您可以使用或其他一些較低級別的技術,但沒有理由這樣做。)文檔位於軟件包內的.chm文件中,或者您可以找到它們的副本at ActiveState。你想要的功能在win32api
模塊中。
如果你的谷歌爲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)
當你完成。
*還有ReadDirectoryChanges
,哪一個更容易從C使用,而且更加靈活,並且不需要手動有一個變化,每次列出目錄...但它實際上是更痛苦的Python和有較少示例代碼在那裏。