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

$ ? ブロックの最後でパイプを閉じている限り。

上記の例では、次のようにします。

  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 Core Library エントリを参照してください。

于 2013-01-16T02:05:13.187 に答える