由于在win xp上运行的网络(本地)PC上安装从WIN7 PC到老板'打印机(LX 300+)的文档中的兼容性问题,我想创建一个应用程序来创建一个文件夹每次在该文件夹上添加新文件(word,excel,pdf)时,该PC(winxp)和打印(如dropbox除了打印而不是上传)。
我做了我的研究,我已经有了打印脚本(word,excel,pdf)以及创建目录/文件夹的脚本。我现在需要的是:
我正在使用Python 3.3。
答案 0 :(得分:2)
没有跨平台的方式来监视新文件,不能一遍又一遍地阅读目录,看看发生了什么变化,这是一个非常糟糕的主意。
在Windows上查看添加到文件夹的新文件的正确方法是FindFirstChangeNotification
函数。* Obtaining Directory Change Notifications解释它是如何工作的,并以C ++提供示例代码。
要从Python使用这些功能,您需要pywin32
。 (您可以使用ctypes
或其他一些较低级别的技术,但没有充分的理由这样做。)文档位于包内的.chm文件中,或者您可以找到它们的副本{{ 3}}。您想要的功能在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)
。
*还有win32api
,它更容易在C中使用,而且更灵活,并且不需要在每次更改时手动列出目录......但实际上Python更痛苦,而且更少为此提供示例代码。