Ruby:捕获输出

3

我正在尝试学习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个回答

2
作者在你提供的帖子顶部指出输出是否被捕获的重要性:
“[...]这是由于我的Redmine Github Hook插件出现问题,STDERR消息没有被记录。”
听起来作者发现写入stderr的错误消息没有被“捕获”并放入程序的日志文件中,这可能会使诊断这些错误更加困难。
如果你还没有了解过标准流,你可能需要学习一些相关知识。标准流决定了程序输出的方向。如果你能有效地操作标准流,你就可以捕获程序的输出并将其重定向到适当的位置,例如错误消息被记录到日志文件中,生成的数据输出到数据文件中,用户可能想看到的状态更新显示在屏幕上等等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接