当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Open3.pipeline用法及代码示例


本文简要介绍ruby语言中 Open3.pipeline 的用法。

用法

pipeline(*cmds)

Open3.pipeline 将命令列表作为管道启动。它等待命令的完成。没有为第一个命令的标准输入和最后一个命令的标准输出创建管道。

status_list = Open3.pipeline(cmd1, cmd2, ... [, opts])

每个 cmd 都是一个字符串或一个数组。如果它是一个数组,则将元素传递给 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.

例子:

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

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Open3.pipeline。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。