【问题标题】:Run script on file change在文件更改时运行脚本
【发布时间】:2020-12-11 07:51:24
【问题描述】:

我被困在试图解决问题的过程中,并且可以使用一些解决方法。

我有一个在 Windows 机器上运行的程序。在运行程序时,将数据写入 JSON 格式的文件。当程序关闭时,它会停止写入数据文件,清理文件然后关闭它。

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

我尝试使用 lua 脚本完成此操作,该脚本由正在运行的程序在关闭时触发,但无法访问该文件,因为在我的脚本执行时它仍处于打开状态。

出于这个原因,我试图弄清楚如何监视文件的更改。一旦文件被更改/关闭,我需要做的就是将文件复制到另一个位置。

我不知道实现这一点需要什么编程语言,但我猜 python 可以做到。我没有使用 python 的经验,但如果需要完成这项任务,我愿意学习。我确实对nodejs、javascript和Lua有所了解。

【问题讨论】:

  • 问题不清楚。你在你的程序中使用什么语言?也许你应该运行脚本/程序来运行你的原始程序,当它完成时,它会运行复制文件的代码。这应该可以在任何可以运行其他程序的语言中实现——甚至是PHP——使用与exec()类似的命令。
  • 也许您应该将文件直接保存在预期的位置,而不是使用copy
  • 抱歉,问题很明确。我问可以使用什么语言来监视文件的更改。有问题的程序是一个商业 Windows 应用程序,我可以修改它。每当程序运行时,程序都会写入输出的文件,除了计划重启之外。在这些重新启动期间,我想将现在关闭的数据文件复制到另一个位置,我将在该位置上运行其他操作,同时程序重新打开原始文件并开始再次写入。
  • 这个问题的答案是 - 任何语言。

标签: javascript python node.js windows lua


【解决方案1】:

编程语言不是关键选择;使用任何你方便的东西。困难的部分是在文件更改时让 Windows 报告。

操作系统是资源管理器;尝试监视 target 资源的任意更改可能会占用大量资源。如果您想这样做,您可以安排 (cron) 一个单行 shell 命令,该命令查找自上次运行以来的任何更改。检查修改时间戳。如果文件最近发生了更改,则启动您的脚本。

您无法合理地运行一致的监控进程。这种能力对于创建一个操作系统原语来说太昂贵了,就像“忙循环”检查一样。

如果您的用例需要在每次更改时触发您的脚本,即使连续更改仅相隔几毫秒,那么我知道您的问题没有可行的解决方案。如果您对每个周期仅触发一次(十分钟?)感到满意,那么检查修改时间对您来说应该足够了。

最重要的是,处理这种情况的“正确”方法是您首先尝试的方法:将触发器构建到更新程序的设计中。如果没有这种协调,您的问题就相当于入侵检测,就系统资源而言,这不是漂亮。

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

【讨论】:

  • 感谢您的回复。我同意。我的问题是我无法找到一种方法让我的 lua 脚本等待我无法控制的其他函数完成写入要执行的文件,这会导致我的脚本失败。我很害怕这超出了我的能力范围,但我想我会看看是否有人知道如何做到这一点,因为我已经问过如何让我的 lua 脚本/函数等待而没有运气。
  • 啊哈!因此,您不需要 permanent 触发器,只需在脚本等待时进行一次检查。你不能从lua检查文件状态吗?
猜你喜欢
  • 2017-05-28
  • 2021-09-17
  • 2018-12-15
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多