2012-03-27 6 views
1

Ruby의 pty를 시험해보기 위해 약간의 테스트를하고 있었지만 제대로 할 수 없었습니다. 주된 문제는 정규 표현식이 욕심이 없다는 것입니다.
The whole output is ||||
password1234
Thank you! Your password is: p||||
output1 = |
|
output1 = |password1234
|
output1 = |Thank you! Your password is: p|
Ruby의 욕심없는 정규 표현식 : pty and expect

: 출력을 인쇄 할 때, 나는이 얻을 불행하게도

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 

:

inputs.rb라는 프로그램입니다 :

puts "Give me [email protected] password:" 
password = gets.chomp() 
puts "Thank you! Your password is: #{password}" 

그리고 이것은 test.rb라는 프로그램입니다 이유가 무엇입니까
Thank you! Your password is: p||||
Thank you! Your password is: password1234|||| 대신 ?

정상입니까? 경우 :이 동작을 변경할 수있는 방법이 있습니까? 내가 시도

것들 : Rubular 나에

루비 버전 : 1.8.7
우분투 : 10.04 (맑은 Lynx는) 당신이 가질 수있는 아이디어를 주셔서 감사합니다

. 고맙습니다.

+1

실제 질문을 정확히 찾으려면 질문을 정리해야합니다. – sawa

답변

0

캐리지 리턴이 "+"한정 기호를 혼동시키는 것처럼 보입니다.

는 아래 (출력 포맷을 엉망 트리밍한다) 캐리지 리턴을 포함하는 전체 라인

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

행운 일치한다.

+0

고맙습니다. 마침내 \ r \ n 대신 \ r을 사용했지만 이것을 지적 해 주셔서 감사합니다. – dcere