2012-03-27 15 views
1

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:

Ruby-Version: 1.8.7
Ubuntu: 10.04 (Lucid Lynx)

ich irgendwelche Ideen schätzen Sie haben können. Vielen Dank.

+1

Sie sollten Ihre Frage verkleinern, um die wirkliche Frage zu lokalisieren. – sawa

Antwort

0

Sieht so aus, als würde der Wagenrücklauf den Quantifikator "+" verwirren.

Die unten entspricht der gesamten Linie, einschließlich der Wagenrücklauf (die die Ausgabeformatierung vermasselt und sollte beschnitten werden)

reader.expect(/Thank you! Your password is: \w+\r/) do |output| 

Viel Glück.

+0

Vielen Dank. Ich habe endlich \ r \ n anstelle von \ r benutzt, aber danke, dass du darauf hingewiesen hast. – dcere