Я играю с 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 здесь: Почему это работает, как будто это не поток? Я попытался запустить Sinatra с помощью интерпретатора 1.9.1, и это сработало. Однако, под 1.8.6 это не так. Мод может закрыть этот вопрос, если захочет.