如何在Ruby中将IO对象转换为字符串?

时间:2013-03-13 01:47:03

标签: ruby io

我正在使用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类方法,但我无法弄清楚如何操作该对象中的数据。有什么建议吗?

2 个答案:

答案 0 :(得分:27)

我通过将输出定向到StringIO对象而不是STDOUT来解决这个问题:

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

答案 1 :(得分:-1)

STDOUT接受字符串,它不提供字符串。你可以写信,但不能从中读取。

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