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.
1 2 3 4 5 6 7 8 | 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.close |
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. |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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.