我有一个程序在特定目录中创建文件。 当这些文件准备就绪时,我运行Latex来生成.pdf文件。 所以,我的问题是,如何使用这个目录更改作为触发器 来调用Latex,使用shell脚本或python脚本?检查目录内容是否用shell脚本或python更改
问候
我有一个程序在特定目录中创建文件。 当这些文件准备就绪时,我运行Latex来生成.pdf文件。 所以,我的问题是,如何使用这个目录更改作为触发器 来调用Latex,使用shell脚本或python脚本?检查目录内容是否用shell脚本或python更改
问候
是dnotify你需要什么?
make on unix系统通常用于按日期跟踪文件发生更改时需要重建的内容。这项工作通常使用rather good makefile。谷歌代码似乎还有另一个alternative
自己并没有太多的Python人。但是,如果你在linux上,你可以周期性地shell和“ls -lrt/path/to/directory”(获取目录内容并按最后修改的顺序排序),并比较最后两次调用的结果有区别。如果是这样,那么就会发生变化。不是很详细,但完成了工作。
Python FAM是FAM一个Python接口(文件变更监视器)
你也可以看看Pyinotify,这是用来监视文件系统变化的模块。
您不仅需要检查更改,但需要知道全部更改在运行LaTeX之前已完成。例如,如果在第一个文件被修改之后启动LaTeX,并且在更多更改仍处于待定状态时,您将使用部分数据,并且必须稍后重新运行。
等待第一个程序来完成:
#!/bin/bash
first-program &&
run-after-changes-complete
使用& &意味着如果第一成功完成(零退出代码)仅执行所述第二命令。由于这个简单的脚本将始终运行第二个命令,即使第一个命令不会更改任何文件,您也可以将它合并到您熟悉的任何构建系统中,例如make。
您可以使用本机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
访问,属性取决于您的系统)来解决此问题。