我想编写一个 Ruby 脚本来过滤一个正在被追踪的文件的输出 (tail -f log.log | ./my_filter.rb
)。我相信我已经同步读取了标准输入和标准输出,但我仍然看到我的输出是延迟批量输出的,每次大约 20 行,而不是实时输出。
我可以通过以下简单的代码复现问题:
#!/usr/bin/ruby
$stdout.sync = true
$stdin.sync = true
ARGF.each do |line|
puts line
end
我是否缺少一些设置来消除缓冲区,或者类似的东西?
编辑: 澄清一下,如果我只是使用tail -f
命令查看日志,那么每秒钟会有很多行被写入。
tail -f log.log
,那么它会实时输出吗? - Petr Skociktail -f
命令查看日志时,更新流是实时的,每秒钟有很多行,所以我认为问题出在我的脚本上。如果我将日志输入到grep
或其他命令行工具中,一切也都是实时的。 - Michael