我有一个程序可以在特定目录中创建文件。 当这些文件准备好后,我运行Latex来生成.pdf文件。 所以,我的问题是,如何将此目录更改用作触发器 使用shell脚本或python脚本调用Latex?
最好的问候
答案 0 :(得分:5)
inotify
取代dnotify
。
... dnotify要求为您要监视更改的每个目录打开一个文件描述符...
此外,文件描述符固定目录,不允许卸载后备设备,这会导致涉及可移动介质的方案出现问题。使用inotify时,如果您正在观看已卸载的文件系统上的文件,则会自动删除监视并收到卸载事件。
......等等。
与其祖先dnotify不同,inotify不会因各种限制而使您的工作复杂化。例如,如果您在可移动媒体上观看文件,则这些文件不会被锁定。与之相比,dnotify要求文件本身是开放的,因此真正“锁定”它们(妨碍卸载媒体)。
答案 1 :(得分:3)
dnotify你需要什么?
答案 2 :(得分:3)
make on unix系统通常用于按日期跟踪文件更改时需要重建的内容。我通常使用rather good makefile来完成这项工作。谷歌代码似乎还有另外alternative
答案 3 :(得分:3)
您不仅需要检查更改,还需要知道在运行LaTeX之前所有更改已完成。例如,如果您在修改了第一个文件后启动了LaTeX,并且还有更多的更改仍未处理,那么您将使用部分数据并且必须稍后重新运行。
等待第一个程序完成:
#!/bin/bash
first-program &&
run-after-changes-complete
使用&&表示第二个命令仅在第一个命令成功完成时执行(零退出代码)。因为这个简单的脚本将始终运行第二个命令,即使第一个命令没有更改任何文件,您可以将其合并到您已经熟悉的任何构建系统中,例如make。
答案 4 :(得分:2)
Python FAM是FAM(文件更改监视器)
的Python接口您还可以查看Pyinotify,它是用于监控文件系统更改的模块。
答案 5 :(得分:1)
我自己并不是一个蟒蛇人。但是,在一个紧要关头,假设你在Linux上,你可以定期shell并“ls -lrt / path / to / directory”(获取目录内容并按上次修改排序),并比较最后两次调用的结果为了区别。如果是这样,那么就会发生变化。不是很详细,但完成工作。
答案 6 :(得分:0)
您可以使用实现MD5算法的本机python模块hashlib
:
>>> 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'
您可以将此结果保存在文件或变量中,并将其与下次运行的结果进行比较。这将检测任何子目录中任何文件的更改。
这不考虑文件权限更改;如果您还需要监控这些更改,可以通过在os.stat
变量附加表示权限的字符串(例如,可通过m
访问,属性取决于您的系统)来解决此问题。