2013-03-13 39 views
13

我正在使用一個IO對象(一些STDOUT輸出文本),我試圖將它轉換爲字符串,以便我可以做一些文本處理。我願做這樣的事情:如何將IO對象轉換爲Ruby中的字符串?

my_io_object = $stdout 
#=> #<IO:<STDOUT>> 

my_io_object.puts('hi') #note: I know how to make 'hi' into a string, but this is a simplified example 
#=>hi 

my_io_object.to_s 

我已經嘗試了幾件事情,並得到了一些錯誤:

my_io_object.read 
#=> IOError: not opened for reading 

my_io_object.open 
#=> NoMethodError: private method `open' called for #<IO:<STDOUT>> 

IO.read(my_io_object) 
#=> TypeError: can't convert IO into String 

我已經通過IO類的方法讀,我做不到弄清楚如何處理該對象中的數據。有什麼建議麼?

+0

「IO錯誤:沒有打開閱讀」應該是一個適當的線索。嘗試搜索所述錯誤。 – 2013-03-13 01:55:11

+0

你沒有清楚地說出你想要做什麼。解釋你想要做什麼,我們可以給你一個更好的方法來達到目的。你如何獲得標準輸出文本? – 2013-03-13 05:27:13

+0

謝謝,@theTinMan。對不清楚的道歉 - 這是我的困惑的反映。我最終通過將STDOUT指向一個StringIO對象來解決這個問題。 – MothOnMars 2013-03-13 22:59:37

回答

21

我解決了這個由我的輸出定向到StringIO的對象,而不是STDOUT:

> output = StringIO.new 
#<StringIO:0x007fcb28629030> 
> output.puts('hi') 
nil 
> output.string 
"hi\n" 
-1

STDOUT接受字符串,它不提供字符串。您可以寫信給它,但無法讀取它。

STDOUT.write("hello") # => hello 
STDOUT.read # => IOError: not opened for reading 
+0

嗯。那麼,我唯一的選擇是將輸出定向到文件,然後從文件中讀取以獲取字符串對象? – MothOnMars 2013-03-13 02:03:42

+0

你想做什麼? – 2013-03-13 02:39:27

+1

這是一個非常有趣的問題,因爲STDOUT通常是一個文件,雖然是一種特殊類型的文件。這裏是[tee gem](http://rubydoc.info/gems/tee/1.0.0/frames)文檔。就行爲而言,這可能就是你所追求的。 – vgoff 2013-03-13 02:44:13