Ruby:主动处理管道输出

时间:2017-11-21 20:46:29

标签: ruby pipe

我想主动处理管道的输出。例如,如果我使用交互式控制台托管服务器,我将如何实时获取输出并进行处理?

1 个答案:

答案 0 :(得分:1)

您会在Best practices with STDIN in Ruby?找到一些不错的解释。

您可以执行以下操作

#!/usr/bin/env ruby
ARGF.each_line do |line|
  puts line.upcase
end

给出像

这样的脚本
#!/bin/bash
echo "abcde"
sleep 2
echo "oiiausd"
sleep 2

并喂他们像

$ ./bash_script.sh | ./ruby_script.rb

将输出

ABCDE
OIIAUSD

但请注意,如果您注意到输入流的处理无法按预期工作,您可能必须处理IO缓冲和填充。

另请注意,使用ARGF-magic的优点是您还可以使用./ruby_script.rb LOGFILE.log之类的给定日志文件(没有管道)。