读取定期更改的文件

时间:2015-09-23 11:04:53

标签: ruby file io

我的程序每3秒读一次配置文件。在一个循环中。一旦我用记事本等外部编辑器更改了配置文件,我的程序就会出于某种原因创建一个临时文件并继续从那里读取。

我希望我的程序从当前配置文件中读取,以便在程序中进行最新的更改。

我该怎么办?

简化代码:

while(true)
  file = File.open(filename, "r")
  data = JSON.parse(file.read) if file
  file.close
  sleep(3)
end

2 个答案:

答案 0 :(得分:0)

如果您使用的是Linux,则可以尝试使用linux inotfy service,这是gem。这是example of how to use it

首先,你必须运行

gem install ruby-inotify

然后尝试此代码

  notifier = Inotify.new
  notifier.add_watch(filename, Inotify::CREATE | Inotify::MODIFY)

  notifier.each_event do |ev|
    file = File.open(filename, "r")
    data = JSON.parse(file.read)
    file.close
  end

答案 1 :(得分:-1)

如果您愿意使用gem,请使用以下内容。

https://github.com/thomasfl/filewatcher

用法

FileWatcher.new(["lib/", "Rakefile"]).watch do |filename|
  puts "Changed " + filename
end