我有一个需要大约每秒运行一次的 Ruby 脚本。我正在使用 Ruby 脚本来跟踪目录中文件的修改,并希望脚本在“实时”时间跟踪更新。
基本上,我希望我的脚本执行与在 Unix shell 上运行“top”相同的操作,其中屏幕大约每秒更新一次。 Ruby 中是否有与 JavaScript 中的 setInterval
等效的东西?
最佳答案
有几种方法可以做到这一点。
快速而简单的版本:
外壳(科尔语):
while :; do my_ruby_script.rb sleep 1 done
观看(1):
shell$ watch -n 1 my_ruby_script.rb
这将每秒运行一次脚本,并在终端中显示最近一次运行的输出。
在 ruby 中:
while true do_my_stuff sleep 1 end
这些都遇到了同样的问题:如果实际的脚本/函数需要时间来运行,它会使循环运行的时间少于每秒。
这是一个 ruby 函数,它会确保(几乎)准确地每秒调用一次该函数,只要该函数不超过一秒:
def secondly_loop
last = Time.now
while true
yield
now = Time.now
_next = [last + 1,now].max
sleep (_next-now)
last = _next
end
end
像这样使用它:
secondly_loop { my_function }
关于ruby - 如何使 Ruby 脚本每秒运行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13791964/