2011-02-01 99 views

回答

5

inotify取代dnotify

Why?

... dnotify需要打开一个文件描述符每个你打算要监视更改目录...

此外,文件描述符会固定目录,不允许卸载后备设备,这会在涉及可移动媒体的场景中导致问题。使用inotify时,如果您正在观看未卸载的文件系统上的文件,则手表将自动删除,并且您将收到卸载事件。

...以及更多。

More Why?

与它的祖先dnotify,inotify的不工作的各种限制复杂化。例如,如果您在可移动媒体上观看文件,则这些文件未被锁定。与之相比,dnotify要求文件本身是开放的,从而真正“锁定”它们(妨碍卸载媒体)。

Reference

3

make on unix系统通常用于按日期跟踪文件发生更改时需要重建的内容。这项工作通常使用rather good makefile。谷歌代码似乎还有另一个alternative

1

自己并没有太多的Python人。但是,如果你在linux上,你可以周期性地shell和“ls -lrt/path/to/directory”(获取目录内容并按最后修改的顺序排序),并比较最后两次调用的结果有区别。如果是这样,那么就会发生变化。不是很详细,但完成了工作。

3

您不仅需要检查更改,但需要知道全部更改在运行LaTeX之前已完成。例如,如果在第一个文件被修改之后启动LaTeX,并且在更多更改仍处于待定状态时,您将使用部分数据,并且必须稍后重新运行。

等待第一个程序来完成:

#!/bin/bash 
first-program && 
    run-after-changes-complete 

使用& &意味着如果第一成功完成(零退出代码)仅执行所述第二命令。由于这个简单的脚本将始终运行第二个命令,即使第一个命令不会更改任何文件,您也可以将它合并到您熟悉的任何构建系统中,例如make。

0

您可以使用本机Python模块hashlib它实现了MD5算法:

>>> import hashlib 
>>> import os 
>>> m = hashlib.md5() 
>>> for root, dirs, files in os.walk(path): 
    for file_read in files: 
     full_path = os.path.join(root, file_read) 
     for line in open(full_path).readlines(): 
      m.update(line) 


>>> m.digest() 
'pQ\x1b\xb9oC\x9bl\xea\xbf\x1d\xda\x16\xfe8\xcf' 

您可以保存这个结果在一个文件或变量,并将其与下一个运行的结果。这将检测任何子目录中的任何文件的更改。

这不考虑文件权限更改;如果您还需要监视这些更改,可以通过在m变量上附加一个表示权限的字符串(例如,可通过os.stat访问,属性取决于您的系统)来解决此问题。