23

IOオブジェクト(一部のSTDOUT出力テキスト)を使用していて、テキスト処理を実行できるように文字列に変換しようとしています。私はこのようなことをしたいと思います:

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クラスのメソッドを読みましたが、そのオブジェクトのデータを操作する方法がわかりません。助言がありますか?

4

2 に答える 2

35

STDOUTではなくStringIOオブジェクトに出力を送信することでこれを解決しました。

> output = StringIO.new
#<StringIO:0x007fcb28629030>
> output.puts('hi')
nil
> output.string
"hi\n"
于 2013-03-13T22:57:30.313 に答える
-1

STDOUT文字列を受け入れますが、文字列は提供しません。書き込むことはできますが、読み取ることはできません。

STDOUT.write("hello") # => hello
STDOUT.read # => IOError: not opened for reading
于 2013-03-13T01:50:37.133 に答える