0

我正在尝试shotgun从 Ruby 脚本中调用。我想启动服务器并将默认浏览器(我在 OS X Mavericks 上)打开到站点的根目录。 shotgun提供了这个--browse选项,但我发现它不起作用,无论是从 Ruby 脚本还是从终端。因此,我需要从我的脚本中执行两个命令——shotgun MYAPPFILE然后是open ROOTURL. 问题是该shotgun MYAPPFILE命令会启动 shotgun 进程但不会退出,因此open ROOTURL永远不会执行。

另外,我注意到当我使用反引号调用时shotgun,没有任何正常shotgun输出被打印到 STDOUT。但是当我使用时system("shotgun MYAPPFILE"),我确实看到了这个输出。

我想启动服务器,打开浏览器到根 URL,然后查看 shotgun 输出。做这个的最好方式是什么?

4

1 回答 1

1

这可以通过PTY(伪终端)来完成:

require 'pty'

PTY.spawn "shotgun app.rb" do |stdout, stdin, pid|
  begin
    trap('INT') { Process.kill("INT", pid) }
    `open http://localhost:9393`
    stdout.each { |li| puts li }
  rescue PTY::ChildExited
    puts "Shotgun exited!"
  end
end

当您按下 Ctrl-c(即发送中断)时,上面的代码将退出。PTY由于与输出刷新有关的原因,这里需要与正常过程相反。有关详细信息,请参阅此问题

于 2013-12-06T05:56:37.613 回答