Подтвердить что ты не робот

Как преобразовать объект IO в строку в Ruby?

Я работаю с объектом 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, и я не могу понять, как манипулировать данными в этом объекте. Любые предложения?

4b9b3361

Ответ 1

Я решил это, направив свой вывод на объект StringIO вместо STDOUT:

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

Ответ 2

STDOUT принимает строки, он не содержит строки. Вы можете писать, но не можете читать.

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