class IO
公共实例方法
IO#expect(pattern,timeout=9999999) → Array 点击切换源码
IO#expect(pattern,timeout=9999999) { |result| ... } → nil
expect
库添加了实例方法 IO#expect
,它类似于 TCL expect 扩展。
要使用此方法,您必须 require 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