Ruby:正在编写一个文件;将这些行写入不同的文件

时间:2017-06-07 15:03:09

标签: ruby file

由于某些操作系统限制,我无法在我的prod节点上安装ruby和mysql。我必须处理写在该节点上的日志文件。因此,我计划将日志文件的内容写入另一个文件,因为它写入日志并处理该新文件。

def watch_for(file)

       f = File.open(file,"r")
       f.seek(0,IO::SEEK_END)

       while true do

             select([f])
             line = f.gets

             open('myfile.out', 'a+') { |s|

              s.puts "#{line}"

                }

             end
       end

但这似乎失败了;对此有任何帮助非常感谢。

1 个答案:

答案 0 :(得分:0)

每次循环重新打开输出文件都不是一个好主意。如果您只是计划附加而不是读取文件,请使用'a'而不是“a+'作为IO模式。此外,没有充分的理由使用像"#{line}"这样的字符串插值。我重写了只打开一次文件的方法:

def watch_for(file)

  f = File.open(file,"r")
  f.seek(0,IO::SEEK_END)
  s = File.open('myfile.out', 'a')

  while true do
    s.write(f.readline)
  end
end

如果这根本不是一种方法,可能会更好,因为除了杀死进程之外没有办法退出。当然,您可以使用this comment中提到的tail -f $file >> myfile.out

相关问题