pipeline_rw(*cmds, &block)
Class Public methods
::pipeline_rw starts a list of commands as a pipeline with pipes which connects stdin of the first command and stdout of the last command.
Open3.pipeline_rw(cmd1, cmd2, ... [, opts]) {|first_stdin, last_stdout, wait_threads|
...
}
first_stdin, last_stdout, wait_threads = Open3.pipeline_rw(cmd1, cmd2, ... [, opts])
...
first_stdin.close
last_stdout.closeEach cmd is a string or an array. If it is an array, the elements are passed to Process.spawn.
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.
The option to pass Process.spawn
is constructed by merging opts, the last hash element of the
array and specification for the pipe between each commands.
Example:
Open3.pipeline_rw("tr -dc A-Za-z", "wc -c") {|i,o,ts|
i.puts "All persons more than a mile high to leave the court."
i.close
p o.gets #=> "42\n"
}
Open3.pipeline_rw("sort", "cat -n") {|stdin, stdout, wait_thrs|
stdin.puts "foo"
stdin.puts "bar"
stdin.puts "baz"
stdin.close # send EOF to sort.
p stdout.read #=> " 1\tbar\n 2\tbaz\n 3\tfoo\n"
}
Please login to continue.