pipeline(*cmds)
Class Public methods
::pipeline starts a list of commands as a pipeline. It waits the finish of the commands. No pipe made for stdin of the first command and stdout of the last command.
1 | status_list = Open3.pipeline(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 20 21 22 23 24 25 26 27 28 29 30 31 | fname = "/usr/share/man/man1/ruby.1.gz" p Open3.pipeline([ "zcat" , fname], "nroff -man" , "less" ) #=> [#<Process::Status: pid 11817 exit 0>, # #<Process::Status: pid 11820 exit 0>, # #<Process::Status: pid 11828 exit 0>] fname = "/usr/share/man/man1/ls.1.gz" Open3.pipeline([ "zcat" , fname], "nroff -man" , "colcrt" ) # convert PDF to PS and send to a printer by lpr pdf_file = "paper.pdf" printer = "printer-name" Open3.pipeline([ "pdftops" , pdf_file, "-" ], [ "lpr" , "-P#{printer}" ]) # count lines Open3.pipeline( "sort" , "uniq -c" , :in => "names.txt" , :out => "count" ) # cyclic pipeline r,w = IO .pipe w.print "ibase=14\n10\n" Open3.pipeline( "bc" , "tee /dev/tty" , :in =>r, :out =>w) #=> 14 # 18 # 22 # 30 # 42 # 58 # 78 # 106 # 202 |
Please login to continue.