當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Ruby Open3.pipeline_rw用法及代碼示例


本文簡要介紹ruby語言中 Open3.pipeline_rw 的用法。

用法

pipeline_rw(*cmds, &block)

Open3.pipeline_rw 將命令列表作為管道啟動,管道連接到第一個命令的標準輸入和最後一個命令的標準輸出。

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

每個 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.

傳遞給 Process.spawn 的選項是通過合並數組的最後一個哈希元素 opts 以及每個命令之間的管道規範來構造的。

例子:

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"
}

相關用法


注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Open3.pipeline_rw。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。