本文简要介绍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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。