1

私はRubyの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 ||||
password1234
Thank you! Your password is: p||||
output1 = |
|
output1 = |password1234
|
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)

私はあなたが持っているかもしれないどんな考えにも感謝します。どうもありがとうございます。

4

1 に答える 1

0

キャリッジリターンが「+」数量詞を混乱させているようです。

以下は、キャリッジリターン(出力フォーマットを台無しにするため、トリミングする必要があります)を含む行全体に一致します。

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

幸運を。

于 2012-03-27T06:13:23.067 に答える