13

我正在使用 IO.popen 执行命令并捕获输出,如下所示:

process = IO.popen("sudo -u service_user -i start_service.sh") do |io|
    while line = io.gets
      line.chomp!
      process_log_line(line)
    end
  end

如何捕获 *start_service.sh* 的退出状态?

4

1 回答 1

16

您可以通过引用$?来捕获通过 IO.open() 调用的命令的退出状态。只要您在块的末端关闭了管道。

在上面的示例中,您将执行以下操作:

  process = IO.popen("sudo -u service_user -i start_service.sh") do |io|
    while line = io.gets
      line.chomp!
      process_log_line(line)
    end
    io.close
    do_more_stuff if $?.to_i == 0 
  end

有关更多信息,请参阅IO.popen 的 Ruby 核心库条目。

于 2013-01-16T02:05:13.187 回答