【发布时间】:2013-02-28 19:34:50
【问题描述】:
我正在使用一个 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 类方法,但不知道如何操作该对象中的数据。有什么建议吗?
【问题讨论】:
-
"IOError: not opens for reading" 应该是一个合适的线索。尝试搜索所述错误。
-
您还没有清楚地说明您要做什么。解释你想做什么,我们可能会给你一个更好的方法来实现它。你是如何得到你的 STDOUT 文本的?
-
谢谢,@theTinMan。为缺乏明确性道歉 - 这反映了我的困惑。我最终通过将 STDOUT 指向 StringIO 对象来解决这个问题。
-
将 STDOUT 指向 StringIO 通常是做错事的标志。创建一个新问题(因为它是一个不同的主题)并解释您正在尝试做什么,展示您如何使用自己的方式完成它,并要求一种更直接/更清洁的方式来完成它。很多时候,我们在代码的早期就走错了路,从那个地方看不到更好的方法,需要其他人的眼睛才能看到并指出我们出错的地方。