2013-03-13 4 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 

私はいくつかのことを試してみましたが、いくつかのエラーを得ている:私はIOクラスのメソッドを読んできた、と私はできません

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 

をそのオブジェクトのデータを操作する方法を理解します。助言がありますか?

+0

を「例外IOError:読み込み用に開かれていないが、」適切な手がかりにする必要があります。上記のエラーを検索してみてください。 –

+0

あなたは何をしようとしているのか明確には言いませんでした。あなたが何をしたいのかを説明してください。私たちはあなたにもっと良い方法を与えることができます。どのようにSTDOUTテキストを取得していますか? –

+0

ありがとう、@ theTinMan。明快さの欠如に対する謝罪 - それは私の混乱の反映です。私はこれを解決するために、STDOUTをStringIOオブジェクトに向けることで解決しました。 – MothOnMars

答えて

21

私の代わりにSTDOUTのStringIOオブジェクトに私の出力を向けることによって、これを解決:

> 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

Hmm。だから私は唯一のオプションは、ファイルに出力を指示し、文字列オブジェクトを取得するファイルから読み取るですか? – MothOnMars

+0

あなたは何をしようとしていますか? –

+1

これは非常に興味深い質問です.STDOUTは一般的にファイルですが、特別な種類のファイルです。ここには[tee gem](http://rubydoc.info/gems/tee/1.0.0/frames)のドキュメントがあります。これは、行動が続く限り、あなたが後にしているものかもしれません。 – vgoff

関連する問題