2012-10-28 136 views
3

在我試圖瞭解更多關於Ruby的,我在看這篇博客http://mentalized.net/journal/2010/03/08/5_ways_to_run_commands_from_ruby/探討不同執行命令的方法,例如內核#exec和內核#系統。他的例子文件具有的代碼紅寶石:捕獲輸出

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

兩行,他注意到,每當他運行一個命令,輸出是否被捕獲或沒有。例如,這裏捕獲了STDOUT,但STDERR不是。

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

但爲什麼這很重要?實際上,產出是否被「俘獲」有什麼不同?我試圖找到我的紅寶石書這個問題的答案,但無濟於事。

感謝您的解釋。

回答

2

筆者注意到的輸出是否被捕獲或根本沒有的帖子頂你鏈接的意義:

[...]它是由一個問題,我的管理平臺Github上掛鉤插件觸發其中 STDERR消息未被記錄。

聽起來像作者發現寫入到stderr的錯誤消息沒有被「捕獲」並放入程序的日誌文件中,這可能使得診斷這些錯誤變得更加困難。

如果你還沒有,你可能想了解多一點關於standard streams,其中確定程序的輸出定向。如果你能夠有效地操作標準流,你可以從你的程序捕獲輸出重定向到合適的地方,例如錯誤去到一個日誌文件,生成的數據輸出到數據文件時,用戶可能希望看到往屏幕狀態更新等