Ответ 1
Я решил это, направив свой вывод на объект StringIO вместо STDOUT:
> output = StringIO.new
#<StringIO:0x007fcb28629030>
> output.puts('hi')
nil
> output.string
"hi\n"
Я работаю с объектом 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, и я не могу понять, как манипулировать данными в этом объекте. Любые предложения?
Я решил это, направив свой вывод на объект StringIO вместо STDOUT:
> output = StringIO.new
#<StringIO:0x007fcb28629030>
> output.puts('hi')
nil
> output.string
"hi\n"
STDOUT
принимает строки, он не содержит строки. Вы можете писать, но не можете читать.
STDOUT.write("hello") # => hello
STDOUT.read # => IOError: not opened for reading