自动检测文件夹中新添加的文件,并在默认打印机上打印

由于从我的WIN7电脑打印文档中的兼容性问题,我的老板的打印机(LX 300+)安装在联网的(本地)PC上运行WIN XP,我想创build一个应用程序,将在该PC上创build一个文件夹winxp)并且每次在该文件夹上添加一个新文件(word,excel,pdf)时都会打印(比如dropbox除了打印而不是上传)。

我做了我的研究,我已经得到了打印脚本(word,excel,pdf),还有一个创build目录/文件夹的脚本。 我现在需要的是:

  • 一个附加(或者其他方式)到文件夹中的Python脚本(我不知道它如何与Dropbox一起工作),它将检测该文件夹中新添加的文件,并使用默认打印机自动在默认打印机上打印设置。

我正在使用Python 3.3。

没有跨平台的方式来观察新的文件,缺乏反复阅读目录,看到有什么改变,这是一个非常糟糕的主意。

在Windows上查看新文件的正确方法是FindFirstChangeNotification函数。* 获取目录变更通知说明了它是如何工作的,并给出了C ++中的示例代码。

要从Python使用这些函数,您将需要pywin32 。 (你可以使用ctypes或其他一些较低级别的技术,但没有理由这样做。)文档位于包内的.chm文件中,或者可以在ActiveState中find它们的副本。 你想要的function是在win32api模块。

如果你的谷歌为Python FindFirstChangeNotification ,你可能会发现很多示例代码。 但它会看起来像这样(不完整的和未经testing的代码,只是为了让你开始):

 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) 

在真实的代码中,您可能需要一些更好的error handling,当您完成后您将需要FindCloseChangeNotification(ffc)


还有一个ReadDirectoryChanges ,它更容易在C中使用,而且更加灵活,并且不需要每次修改都手动列出目录…但是实际上Python更加痛苦,而且它的样例代码更less。