pipeline_start(*cmds, &block)
Class Public methods
::pipeline_start starts a list of commands as a pipeline. No pipe made for stdin of the first command and stdout of the last command.
1 2 3 4 5 6 | Open3.pipeline_start(cmd1, cmd2, ... [, opts]) {|wait_threads| ... } wait_threads = Open3.pipeline_start(cmd1, cmd2, ... [, opts]) ... |
Each cmd is a string or an array. If it is an array, the elements are passed to Process.spawn.
1 2 3 4 5 6 7 | cmd: commandline command line string which is passed to a shell [env, commandline, opts] command line string which is passed to a shell [env, cmdname, arg1, ..., opts] command name and one or more arguments (no shell) [env, [cmdname, argv0], arg1, ..., opts] command name and arguments including argv[ 0 ] (no shell) Note that env and opts are optional, as Process.spawn. |
Example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # run xeyes in 10 seconds. Open3.pipeline_start( "xeyes" ) {|ts| sleep 10 t = ts[ 0 ] Process.kill( "TERM" , t.pid) p t.value #=> #<Process::Status: pid 911 SIGTERM (signal 15)> } # convert pdf to ps and send it to a printer. # collect error message of pdftops and lpr. pdf_file = "paper.pdf" printer = "printer-name" err_r, err_w = IO .pipe Open3.pipeline_start([ "pdftops" , pdf_file, "-" ], [ "lpr" , "-P#{printer}" ], :err =>err_w) {|ts| err_w.close p err_r.read # error messages of pdftops and lpr. } |
Please login to continue.