我正在玩 Rails 和 Sinatra,我想在服务器上执行命令。这些命令是从表格中输入的。问题是,如果我输入一个需要输入的命令,我的整个应用程序就会挂起。这是我用来执行它们的代码:
@threads << Thread.new do
Thread.current["buffer"] = ""
puts "starting #{params[:command]}"
IO.popen(params[:command]) do |io|
io.each_line {|l| Thread.current["buffer"] += l}
end
end
这对于像ls
...这样的简单命令可以正常工作,但是例如,如果我输入pause
期望用户按下一个键继续,一切都会挂起。我怎样才能解决这个问题?
编辑:我只记得我去年在这里问过关于 Ruby 线程行为的问题:为什么它像没有线程一样运行?. 我尝试使用 1.9.1 解释器运行 Sinatra,它成功了。然而,在 1.8.6 下却没有。如果他愿意,模组可以关闭这个问题。