实时监测文件变动并运行脚本

我现在遇到了一个问题,需要一些解决方向。

我的程序在 Windows 机器上运行。在运行过程中,程序将以 JSON 格式将数据写入文件。当程序关闭时,它停止向数据文件写入数据,清理文件并关闭文件。

我需要在数据文件关闭或更改时触发一个脚本。

我尝试使用由运行中的程序触发的 lua 脚本来实现这一点,但由于当我的脚本执行时文件仍然在打开状态,所以无法访问文件。

因此,我正在尝试找出如何监视文件的变化。一旦文件发生更改/关闭,我只需要将文件复制到另一个位置即可。

我不知道哪种编程语言可以完成这个任务,但我猜 Python 可以做到。虽然我没有 Python 的经验,但我愿意学习以完成这个任务。我对 nodejs、JavaScript 和 Lua 有一些了解。

点赞
用户4785185
用户4785185

编程语言并不是关键选择;请用您方便的语言。难点在于当文件被更改时如何让 Windows 进行报告。

操作系统是资源管理器;尝试监视任意更改的目标资源可能会对资源产生很大压力。如果您想以这种方式做,可以通过计划(cron)一行 shell 命令来查找自上次运行以来的任何更改。检查修改时间戳。如果文件最近被更改,那么触发您的脚本。

您不可以合理地运行持续的监视进程。这种能力太昂贵了,使操作系统原语变得无法实现,"busy loop" 检查也是如此。

如果您的用例要求每次更改都触发您的脚本,即使连续的更改只相隔几毫秒,那么我不知道您的问题有可行的解决方案。如果每隔一段时间(十分钟?)触发一次就可以满足您的需求,请检查修改时间,这应该足够好了。

最重要的是,处理这种情况的 "正确" 方法是您首先尝试的:将您的触发器构建到更新程序的设计中。没有这种协调,您的问题相当于入侵检测,在系统资源方面是不可取的。

您可以直接从您的 lua 脚本中使用 LuaFileSystem package 检查文件的修改时间。attributes 返回一个文件属性集合,包括最近的修改时间戳。

2020-08-21 23:49:08