Open3#pipeline
# File tmp/rubies/ruby-4.0.0/lib/open3.rb, line 1334
def pipeline(*cmds)
if Hash === cmds.last
opts = cmds.pop.dup
else
opts = {}
end
pipeline_run(cmds, opts, [], []) {|ts|
ts.map(&:value)
}
end
Basically a wrapper for Process.spawn that:
-
Creates a child process for each of the given
cmdsby callingProcess.spawn. -
Pipes the
stdoutfrom each child to thestdinof the next child, or, for the last child, to the caller’sstdout. -
Waits for the child processes to exit.
-
Returns an array of
Process::Statusobjects (one for each child).
Example:
wait_threads = Open3.pipeline('ls', 'grep R') # => [#<Process::Status: pid 2139200 exit 0>, #<Process::Status: pid 2139202 exit 0>]
Output:
Rakefile README.md
Like Process.spawn, this method has potential security vulnerabilities if called with untrusted input; see Command Injection.
If the first argument is a hash, it becomes leading argument env in each call to Process.spawn; see Execution Environment.
If the last argument is a hash, it becomes trailing argument options in each call to Process.spawn‘ see Execution Options.
Each remaining argument in cmds is one of:
-
A
command_line: a string that begins with a shell reserved word or special built-in, or contains one or more metacharacters. -
An
exe_path: the string path to an executable to be called. -
An array containing a
command_lineor anexe_path, along with zero or more string arguments for the command.