本文简要介绍ruby语言中  Kernel.open  的用法。
用法
open(path [, mode [, perm]] [, opt]) → io or nilopen(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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
