3

为了更多地了解 Ruby,我正在查看这篇博客文章http://mentalized.net/journal/2010/03/08/5_ways_to_run_commands_from_ruby/讨论了不同的命令执行方法,例如 Kernel#exec 和 Kernel #系统。他的示例文件有两行代码

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

他指出,每当他运行命令时,无论输出是否被捕获。例如,这里捕获了 STDOUT,但没有捕获 STDERR。

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

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

谢谢你的解释。

4

1 回答 1

2

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

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

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

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

于 2012-10-28T23:52:18.630 回答