Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 读取定期更改的文件_Ruby_File_Io - Fatal编程技术网

Ruby 读取定期更改的文件

Ruby 读取定期更改的文件,ruby,file,io,Ruby,File,Io,我的程序每3秒读取一个配置文件。在一段时间内循环。一旦我用记事本之类的外部编辑器更改了配置文件,我的程序就会出于某种原因创建一个临时文件并从中继续读取 我希望我的程序从当前配置文件中读取,以便在我的程序中有最新的更改 我能怎么办 简化代码: while(true) file = File.open(filename, "r") data = JSON.parse(file.read) if file file.close sleep(3) end 如果您愿意为此使用gem,请使

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

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

我能怎么办

简化代码:

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

如果您愿意为此使用gem,请使用以下方法

用法


如果你在linux上,你可以试试linux,这是最好的。这是一个很好的例子

首先你得跑

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

这是你的节目。您必须说明为什么您的程序会创建一个临时文件并从中读取它。我们不能不知道为什么会发生这种情况。你为什么要投反对票?这基本上就是提问者想要做的。。。我希望我的程序从当前配置文件中读取,以便在我的程序中有最新的更改。
  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