Ruby:捕获输出

时间:2012-10-28 23:44:17

标签: ruby

在我试图了解Ruby的更多信息时,我正在查看这篇博文http://mentalized.net/journal/2010/03/08/5_ways_to_run_commands_from_ruby/,其中讨论了不同的命令执行方法,如Kernel#exec和Kernel#system。他的示例文件有两行代码

  #!/usr/bin/env ruby
puts "out"
STDERR.puts "error"

并且他指出,无论何时他运行命令,是否捕获输出。例如,此处捕获STDOUT,但STDERR不是。

 >> `./err.rb`
err
=> "out\n"

但为什么这很重要?无论输出是否被“捕获”,实际上有什么区别。我试图在我的Ruby书中找到答案,但无济于事。

感谢您的解释。

1 个答案:

答案 0 :(得分:2)

作者注意到在您链接的帖子顶部是否捕获了输出的重要性:

  

[...]它是由我的Redmine Github Hook插件的问题引发的   没有记录STDERR消息。

听起来像作者发现写入stderr的错误消息没有被“捕获”并被放入程序的日志文件中,这可能使得诊断这些错误更加困难。

如果还没有,您可能想要了解更多关于standard streams的信息,它可以确定程序输出的定向位置。如果您能够有效地操作标准流,则可以捕获程序的输出并将其重定向到适当的位置,例如错误转到日志文件,生成数据输出到数据文件,用户可能想要看到的状态更新转到屏幕等。