2010-08-28 36 views
7

我要執行從Ruby腳本shell命令,但我必須檢索輸出,這樣我可以在腳本以後使用它。在Ruby中從「system」命令返回輸出?

這裏是我的代碼:

output = system "heroku create" # => true 

但是系統命令返回一個布爾值,而不是輸出。

簡單地說,系統「的Heroku打造」具有輸出到我的屏幕(這它),而且還返回輸出,所以我可以處理它。

+0

查看http://stackoverflow.com/questions/690151/getting-output-of-system-calls-in-ruby – weakish 2015-01-03 13:25:23

回答

8

的Open3庫爲您提供了完全訪問標準的IO流(STDIN,STDOUT和STDERR)。 這是紅寶石的一部分,所以沒有必要安裝一個寶石:

require 'open3' 

stdin, stdout, stderr = Open3.popen3("heroku create") 
puts stdout.read 
stdin.close; stdout.close; stderr.close 

,或者您可以使用它隱含關閉流以塊的形式:

require 'open3' 

Open3.popen3("heroku create") do |stdin, stdout, stderr| 
    puts stdout.read 
end 

Open3 documentation的全部細節。

編輯:增加了額外的流成交明細。謝謝克里斯託弗和格雷戈裏。

+1

你不應該「關閉」這些?我正在尋找這方面的文檔,並且沒有任何例子顯示您是否需要。 (對不起:蟒,C#,C++背景,所有這些需要的您使用備用語法或手動關閉流)。 – Crisfole 2013-02-15 14:09:19

+1

你說得對,@ChristopherPfohl:從文檔,'標準輸入/輸出/ err.close#標準輸入,輸出和錯誤應明確在此form.'關閉。但是,您也可以使用將自動關閉的塊表單。 – gregoltsov 2013-09-30 10:48:40

相關問題