3

リーダーとライターの 2 つの単純なスクリプトがあります。

writer.rb:

while true
  puts "hello!"
  $stdout.flush
  sleep 1
end

reader.rb:

while true
  puts "I read: #{$stdin.read}!"
  sleep 1
end

writer.rbstdout に継続的に書き込みreader.rb、stdin から継続的に読み取ります。

今私がこれを行うと:

ruby writer.rb | ruby reader.rb

私はこれが印刷を続けることを期待します

I read: hello!
I read: hello!
I read: hello!

1 秒間隔で。しかし、何も印刷せずにブロックするだけです。印刷するにはどうすればよいですか?writer.rb出力をキャッシュしていると思ったので を追加しまし$stdout.flushたが、それでもうまくいきませんでした。

4

2 に答える 2

3

EOF までの読み取りの$stdin.gets代わりに使用する必要があります。.read.read

puts "I read: #{$stdin.read}!"

する必要があります

puts "I read: #{$stdin.gets}!"

注: これには改行文字が含まれるため、出力は次のようになります。

I read: hello!
!
I read: hello!
!
I read: hello!
!

末尾の改行が必要ない場合は、使用します$stdin.gets.chomp

出力$stdin.gets.chomp:

I read: hello!!
I read: hello!!
于 2013-05-16T06:42:46.240 に答える