【问题标题】:Read file that changes regularly读取定期更改的文件
【发布时间】:2015-09-23 11:04:52
【问题描述】:

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

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

我能做些什么呢?

简化代码:

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

【问题讨论】:

  • 这是你的程序。您必须说明为什么您的程序会创建一个临时文件并从那里读取它。我们不知道为什么会发生这种情况,我们无能为力。

标签: ruby file io


【解决方案1】:

如果你在linux上,你可以试试linuxinotfy 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

【讨论】:

    【解决方案2】:

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

    https://github.com/thomasfl/filewatcher

    用法

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

    【讨论】:

    • 你为什么要投反对票?这本质上就是提问者试图做的... 我希望我的程序从当前配置文件中读取,以便在我的程序中获得最新的更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多