类 IO
公共实例方法
IO#expect(pattern,timeout=9999999) → Array 点击切换源代码
IO#expect(pattern,timeout=9999999) { |result| ... } → nil
expect
库添加了实例方法 IO#expect
,它类似于 TCL expect 扩展。
要使用此方法,您必须需要 expect
require 'expect'
从 IO
中读取,直到给定的 pattern
匹配或 timeout
超时。
它返回一个数组,其中包含读取的缓冲区,后跟匹配项。如果给定一个块,结果将被传递给该块并返回 nil。
当不带块调用时,它会等待直到从 IO
中获得与给定 pattern
匹配的输入,或者指定为超时的时长过去。当从 IO
中获得模式时,将返回一个数组。数组的第一个元素是从 IO
中获得的直到模式匹配的整个字符串,后面跟着指示模式与正则表达式中的锚点匹配的元素。
可选的 timeout 参数以秒为单位定义等待模式的总时间。如果超时过期或找到 eof,则返回或传递 nil。但是,超时会话中的缓冲区将保留以供下次 expect 调用使用。默认超时时间为 9999999 秒。
# File pty/lib/expect.rb, line 33 def expect(pat,timeout=9999999) buf = ''.dup case pat when String e_pat = Regexp.new(Regexp.quote(pat)) when Regexp e_pat = pat else raise TypeError, "unsupported pattern class: #{pat.class}" end @unusedBuf ||= '' while true if not @unusedBuf.empty? c = @unusedBuf.slice!(0) elsif !IO.select([self],nil,nil,timeout) or eof? then result = nil @unusedBuf = buf break else c = getc end buf << c if $expect_verbose STDOUT.print c STDOUT.flush end if mat=e_pat.match(buf) then result = [buf,*mat.captures] break end end if block_given? then yield result else return result end nil end