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


Ruby Kernel.open用法及代碼示例


本文簡要介紹ruby語言中 Kernel.open 的用法。

用法

open(path [, mode [, perm]] [, opt]) → io or nil
open(path [, mode [, perm]] [, opt]) {|io| block } → obj

創建一個連接到給定流、文件或子進程的 IO 對象。

如果 path 不以豎線字符 ( | ) 開頭,則將其視為要使用指定模式打開的文件的名稱(默認為 “r”)。

mode 是字符串或整數。如果是整數,則必須是bitwise-or of open(2) 標誌,例如 File::RDWR 或 File::EXCL。如果是字符串,則為 “fmode”、“fmode:ext_enc” 或 “fmode:ext_enc:int_enc”。

有關mode 字符串指令的完整文檔,請參閱 IO.new 的文檔。

如果正在創建文件,則可以使用perm 參數設置其初始權限。有關權限的說明,請參見 File.new 以及 open(2) 和 chmod(2) 手冊頁。

如果指定了一個塊,它將以 IO 對象作為參數調用,當塊終止時 IO 將自動關閉。該調用返回塊的值。

如果 path 以管道字符 ("|" ) 開頭,則創建一個子進程,通過一對管道連接到調用者。返回的 IO 對象可用於寫入標準輸入並從此子進程的標準輸出中讀取。

如果管道後麵的命令是一個減號("|-"),Ruby fork,並且這個子進程連接到父進程。如果命令不是 "-" ,則子進程運行該命令。請注意,如果該命令包含 shell 元字符,則該命令可能會被 shell 處理。

當子進程是 Ruby(通過 "|-" 打開)時,open 調用返回 nil。如果一個塊與 open 調用相關聯,則該塊將運行兩次——一次在父項中,一次在子項中。

塊參數將是父對象中的 IO 對象和子對象中的nil。父對象的IO 對象將連接到子對象的 $stdin 和 $stdout。子進程將在塊的末尾終止。

例子

從 “testfile” 讀取:

open("testfile") do |f|
  print f.gets
end

產生:

This is line one

打開一個子進程並讀取其輸出:

cmd = open("|date")
print cmd.gets
cmd.close

產生:

Wed Apr  9 08:56:31 CDT 2003

打開一個運行相同 Ruby 程序的子進程:

f = open("|-", "w+")
if f.nil?
  puts "in Child"
  exit
else
  puts "Got: #{f.gets}"
end

產生:

Got: in Child

使用塊打開子進程以接收 IO 對象:

open "|-" do |f|
  if f then
    # parent process
    puts "Got: #{f.gets}"
  else
    # child process
    puts "in Child"
  end
end

產生:

Got: in Child

相關用法


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