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


Ruby Open3.pipeline_r用法及代码示例


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

用法

pipeline_r(*cmds, &block)

Open3.pipeline_r 将命令列表作为管道启动,管道连接到最后一个命令的标准输出。

Open3.pipeline_r(cmd1, cmd2, ... [, opts]) {|last_stdout, wait_threads|
  ...
}

last_stdout, wait_threads = Open3.pipeline_r(cmd1, cmd2, ... [, opts])
...
last_stdout.close

每个 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 for Process.spawn.

例子:

Open3.pipeline_r("zcat /var/log/apache2/access.log.*.gz",
                 [{"LANG"=>"C"}, "grep", "GET /favicon.ico"],
                 "logresolve") {|o, ts|
  o.each_line {|line|
    ...
  }
}

Open3.pipeline_r("yes", "head -10") {|o, ts|
  p o.read      #=> "y\ny\ny\ny\ny\ny\ny\ny\ny\ny\n"
  p ts[0].value #=> #<Process::Status: pid 24910 SIGPIPE (signal 13)>
  p ts[1].value #=> #<Process::Status: pid 24913 exit 0>
}

相关用法


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