实时监控文件的变化

Rom*_*rik 17 monitoring r real-time

我有一个程序监视某些文件的变化.文件一旦更新,就会处理该文件.到目前为止,我已经提出了在R中进行"实时分析"的一般方法.我希望你们有其他方法.也许我们可以讨论他们的优点/缺点.

monitor <- TRUE
start.state <- file.info$mtime # modification time of the file when initiating

while(monitor) {
  change.state <- file.info$mtime
  if(start.state < change.state) {
    #process
  } else {
    print("Nothing new.")
  }
  Sys.sleep(sleep.time)
}
Run Code Online (Sandbox Code Playgroud)

jve*_*ani 7

与使用系统API的建议类似,这也可以使用qtbase(https://r-forge.r-project.org/R/?group_id=454)来完成,这将是R内部的跨平台方式. :

dir_to_watch <- "/tmp"

library(qtbase)
fsw <- Qt$QFileSystemWatcher()
fsw$addPath(dir_to_watch)

id <- qconnect(fsw, "directoryChanged", function(path) {
  message(sprintf("directory %s has changed", path))
})

cat("abc", file="/tmp/deleteme.txt")
Run Code Online (Sandbox Code Playgroud)


jet*_*tru 6

如果您的系统提供用于监视文件系统更改的API,那么您应该使用它.我相信Mac有这个.但不确定其他平台.

编辑:快速goog给了我:

Linux - http://wiki.linuxquestions.org/wiki/FAM

Win32 - http://msdn.microsoft.com/en-us/library/aa364417(VS.85).aspx

显然,这些API将消除您需要的任何轮询.另一方面,他们可能并不总是可用.

Java有这个:http://jnotify.sourceforge.net/http://java.sun.com/developer/technicalArticles/javase/nio/#6

  • 在Linux上,`gamin`和`inotify`可以做到这一点.http://www.noah.org/wiki/FAM,_Gamin,_inotify (4认同)

aL3*_*3xa 6

我有一个黑客的想法:您可以设置CRON作业/计划任务每n秒(或其他)运行R脚本.R脚本检查文件哈希值,如果哈希值不匹配,则运行分析.您可以使用digest::digest功能,只需查看手册.