1

我正在尝试使用 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 可以在这里使用,但我用自定义函数替换了它,以便更好地控制正在发生的事情以进行调试。

4

0 回答 0