Я проводил небольшой тест, чтобы попробовать pty Руби, и я не могу понять это правильно.Я думаю, что основная проблема заключается в том, что регулярное выражение не является жадным.
Эта программа называется inputs.rb
:
puts "Give me root@server password:"
password = gets.chomp()
puts "Thank you! Your password is: #{password}"
И эта программа называется test.rb
:
require 'pty'
require 'expect'
#$expect_verbose = true
#answer = %r/Thank you! Your password is: \w+/
PTY.spawn("ruby ./inputs.rb") do |reader, writer, pid|
writer.sync = true
reader.expect(/root@server password:/) do |output|
writer.puts("password1234")
end
#reader.expect(answer) do |output|
#reader.expect(/Thank you! Your password is: \w{6,}/) do |output|
#reader.expect(/Thank you! Your password is: (\w+)/) do |output|
reader.expect(/Thank you! Your password is: \w+/) do |output|
puts "The whole output is ||||#{output}||||\n"
output.first.each do |line|
puts "output1 = |#{line}|\n"
end
end
end
К сожалению, при печати вывода я получаю это:
The whole output is ||||<br>
password1234<br>
Thank you! Your password is: p||||<br>
output1 = |<br>
|<br>
output1 = |password1234<br>
|<br>
output1 = |Thank you! Your password is: p|
Почему это
Thank you! Your password is: p||||
вместо
Thank you! Your password is: password1234||||
?
Это нормально?Если это так: есть ли способ изменить это поведение?
Вещи, которые я пробовал:
Версия Ruby: 1.8.7
Ubuntu: 10.04 (Lucid Lynx)
Буду признателен за любые ваши идеи.Большое спасибо.