module function Open3.#pipeline_r

pipeline_r(*cmds) -> [IO, [Thread]][permalink][rdoc]
pipeline_r(*cmds) {|last_stdout, wait_thrs| ... } -> ()

指定したコマンドのリストをパイプで繋いで順番に実行します。最後のコマンドの標準出力を受けとる事ができます。

[PARAM] cmds:
実行するコマンドのリストを指定します。それぞれのコマンドは以下のように StringArray で指定します。 commandline にはコマンド全体(例. "nroff -man")を表す String を指定します。 options には Hash で指定します。 env には環境変数を Hash で指定します。 cmdname にはコマンド名を表す String を指定します。 1、2、3 は shell 経由で実行されます。
  1. commandline
  2. [commandline, options]
  3. [env, commandline, options]
  4. [env, cmdname, arg1, arg2, ..., options]
  5. [env, [cmdname, argv0], arg1, ..., options]
[RETURN]
ブロックを指定した場合はブロックの最後に評価された値を返します。ブロックを指定しなかった場合は最後に実行するコマンドの標準出力、実行したプロセスを待つためのスレッドの配列を配列で返します。

例:

require "open3"

Open3.pipeline_r("yes", "head -10") {|r, ts|
  p r.read      #=> "y\ny\ny\ny\ny\ny\ny\ny\ny\ny\n"
  p ts[0].value #=> #<Process::Status: pid 24910 SIGPIPE (signal 13)>
  p ts[1].value #=> #<Process::Status: pid 24913 exit 0>
}

[SEE_ALSO] Open3.#popen3