我想主动处理管道的输出。例如,如果我使用交互式控制台托管服务器,我将如何实时获取输出并进行处理?
答案 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
之类的给定日志文件(没有管道)。