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


Ruby Open3.pipeline_start用法及代碼示例


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

用法

pipeline_start(*cmds, &block)

Open3.pipeline_start 將命令列表作為管道啟動。沒有為第一個命令的標準輸入和最後一個命令的標準輸出創建管道。

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

wait_threads = Open3.pipeline_start(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 for Process.spawn.

例子:

# Run xeyes in 10 seconds.
Open3.pipeline_start("xeyes") {|ts|
  sleep 10
  t = ts[0]
  Process.kill("TERM", t.pid)
  p t.value #=> #<Process::Status: pid 911 SIGTERM (signal 15)>
}

# Convert pdf to ps and send it to a printer.
# Collect error message of pdftops and lpr.
pdf_file = "paper.pdf"
printer = "printer-name"
err_r, err_w = IO.pipe
Open3.pipeline_start(["pdftops", pdf_file, "-"],
                     ["lpr", "-P#{printer}"],
                     :err=>err_w) {|ts|
  err_w.close
  p err_r.read # error messages of pdftops and lpr.
}

相關用法


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