Ich machte einen kleinen Test, um Ruby's Pty und ich kann es nicht richtig machen. Ich denke, das Hauptproblem ist, dass der reguläre Ausdruck nicht gierig ist.Nicht gierige reguläre Ausdrücke in Ruby: Pty und erwarten
Dies ist ein Programm inputs.rb
genannt:
puts "Give me [email protected] password:"
password = gets.chomp()
puts "Thank you! Your password is: #{password}"
Und das ist ein Programm test.rb
genannt:
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(/[email protected] 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
Leider, wenn der Ausgangsdruck ich diese:
The whole output is ||||
password1234
Thank you! Your password is: p||||
output1 = |
|
output1 = |password1234
|
output1 = |Thank you! Your password is: p|
Warum ist es
Thank you! Your password is: p||||
statt
Thank you! Your password is: password1234||||
?
Ist das normal? Falls ja: Gibt es eine Möglichkeit, dieses Verhalten zu ändern?
Dinge, die ich versucht habe:
- Der reguläre Ausdruck auf Rubular: Es funktioniert.
- Alle kommentierten Alternativen: Keiner von ihnen funktioniert (erhalten Sie das vollständige Passwort).
- http://www.42klines.com/2010/08/14/what-to-expect-from-the-ruby-expect-library.html
Ruby-Version: 1.8.7
Ubuntu: 10.04 (Lucid Lynx)
ich irgendwelche Ideen schätzen Sie haben können. Vielen Dank.
Sie sollten Ihre Frage verkleinern, um die wirkliche Frage zu lokalisieren. – sawa