本文簡要介紹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 Kernel.local_variables用法及代碼示例
- Ruby Kernel.Integer用法及代碼示例
- Ruby Kernel.binding用法及代碼示例
- Ruby Kernel.frozen?用法及代碼示例
- Ruby Kernel.`cmd`用法及代碼示例
- Ruby Kernel.autoload用法及代碼示例
- Ruby Kernel.loop用法及代碼示例
- Ruby Kernel.Hash用法及代碼示例
- Ruby Kernel.caller用法及代碼示例
- Ruby Kernel.set_trace_func用法及代碼示例
- Ruby Kernel.exit!用法及代碼示例
- Ruby Kernel.trap用法及代碼示例
- Ruby Kernel.String用法及代碼示例
- Ruby Kernel.select用法及代碼示例
- Ruby Kernel.syscall用法及代碼示例
- Ruby Kernel.then用法及代碼示例
- Ruby Kernel.sprintf用法及代碼示例
- Ruby Kernel.Pathname用法及代碼示例
- Ruby Kernel.srand用法及代碼示例
- Ruby Kernel.yield_self用法及代碼示例
- Ruby Kernel.BigDecimal用法及代碼示例
- Ruby Kernel.raise用法及代碼示例
- Ruby Kernel.test用法及代碼示例
- Ruby Kernel.pretty_inspect用法及代碼示例
- Ruby Kernel.format用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Kernel.open。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。