如何在Ruby中打开StringIO?

如何在Ruby中打开StringIO?,ruby,io,sinatra,pry,Ruby,Io,Sinatra,Pry,我有一个Sinatra应用程序,具有以下main.rb: require 'bundler' Bundler.require get '/' do @@p = Pry.new haml :index end post '/' do code = params[:code] $stdout = StringIO.new @@p.eval(code) output = $stdout.string $stdout = STDOUT output_arr =

我有一个Sinatra应用程序,具有以下
main.rb

require 'bundler'
Bundler.require

get '/' do
  @@p = Pry.new
  haml :index
end

post '/' do
  code = params[:code]

  $stdout = StringIO.new

  @@p.eval(code)
  output = $stdout.string

  $stdout = STDOUT

  output_arr = []
  output.each_line('\n') { |line| output_arr << line }

  output_arr[1]

  binding.pry
end
我不确定这是否相关,但我注意到有趣的是,在
irb
中,如果我
在要求
stringio
之前要求'pry'
,那么它返回
false
,否则返回
true


这让我怀疑Sinatra是否在加载
config.ru
之前从我的GEM文件中包括
Pry
。这可能是问题所在吗?不知道如何解决这个问题

你为什么试图调用
StringIO#open
?你想干什么?如果用一个简单的
put
语句替换
binding.pry
,那么stdout是否有效?我正在尝试从
eval
行中查找捕获stdout,并将其存储在
输出arr
中以供进一步处理。当我重新启动服务器时,puts语句起作用,但在对
eval
的初始调用后,它中断并给我一个
IOError-未打开以写入
错误。
require 'stringio'
require './main'
run Sinatra::Application