如何在Ruby中打开StringIO?
我有一个Sinatra应用程序,具有以下如何在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 =
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