在我试图了解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书中找到答案,但无济于事。
感谢您的解释。
答案 0 :(得分:2)
作者注意到在您链接的帖子顶部是否捕获了输出的重要性:
[...]它是由我的Redmine Github Hook插件的问题引发的 没有记录STDERR消息。
听起来像作者发现写入stderr的错误消息没有被“捕获”并被放入程序的日志文件中,这可能使得诊断这些错误更加困难。
如果还没有,您可能想要了解更多关于standard streams的信息,它可以确定程序输出的定向位置。如果您能够有效地操作标准流,则可以捕获程序的输出并将其重定向到适当的位置,例如错误转到日志文件,生成数据输出到数据文件,用户可能想要看到的状态更新转到屏幕等。