我正在尝试使用 ruby 与 CLI 交互,该 CLI 使用 PTY 获取多个值。但是,我只能获取 PTY 生成的伪终端来查看我传递的第一个值。下面的测试脚本:
测试.rb
require 'pty'
require 'expect'
def till_prompt(cout, prompt)
buffer = ""
regexPrompt = Regexp.new(Regexp.escape(prompt))
loop { buffer << cout.getc.chr; break if buffer =~ regexPrompt }
puts "buffer: \n" + buffer + "\nend of buffer\n"
return buffer
end
$expect_verbose = true
PTY.spawn("ruby inputTest.rb") do |output, input, pid|
till_prompt(output, "1: ")
input.printf("hello\n\rworld\n\r")
till_prompt(output, "2: ")
input.printf("world\n\r")
end
输入测试.rb
require 'highline/import'
word1 = ask("1: ")
word2 = ask("2: ")
word3 = ask("3: ")
system "echo '#{word1}\n#{word2}' > test.log"
puts "#{word1}\n#{word2}"
$ > 猫测试.log
hello
我不明白为什么它只收到第一个响应。
PS 我知道 expect 可以在这里使用,但我用自定义函数替换了它,以便更好地控制正在发生的事情以进行调试。