如何获取使用IO.popen调用的命令的退出状态?

时间:2013-01-16 02:05:13

标签: ruby

我正在使用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 *?

的退出状态

1 个答案:

答案 0 :(得分:11)

只要关闭了块末尾的管道,就可以通过引用 $?来捕获通过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

有关详细信息,请参阅Ruby Core Library entry for IO.popen