Skip to content
class method

Open3.pipeline_r

Open3.pipeline_r([env, ] *cmds, options = {}) → [last_stdout, wait_threads]

Basically a wrapper for Process.spawn that:

  • Creates a child process for each of the given cmds by calling Process.spawn.

  • Pipes the stdout from each child to the stdin of the next child, or, for the last child, to the caller’s stdout.

The method does not wait for child processes to exit, so the caller must do so.

With no block given, returns a 2-element array containing:

  • The stdout stream of the last child process.

  • An array of the wait threads for all of the child processes.

Example:

Example
last_stdout, wait_threads = Open3.pipeline_r('ls', 'grep R')
# => [#<IO:fd 5>, [#<Process::Waiter:0x000055e8de2f9898 dead>, #<Process::Waiter:0x000055e8de2f94b0 sleep>]]
puts last_stdout.read
wait_threads.each do |wait_thread|
  wait_thread.join
end

Output:

Example
Rakefile
README.md

With a block given, calls the block with the stdout stream of the last child process, and an array of the wait processes:

Example
Open3.pipeline_r('ls', 'grep R') do |last_stdout, wait_threads|
  puts last_stdout.read
  wait_threads.each do |wait_thread|
    wait_thread.join
  end
end

Output:

Example
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_line or an exe_path, along with zero or more string arguments for the command.

See Argument command_line or exe_path.

See also #pipeline_r .pipeline .pipeline_rw .capture3 also in 4.1 · 3.4 · 3.3 · 3.2 · 3.1 · 3.0