Ruby で書いてみる。


#!/usr/bin/env ruby
 
STDOUT.sync = true
 
text = '                    Hello, world. This is a pen. My name is Pen. Good-bye world.'
len = 20
 
(0..text.size()-len).each{|i|
  print "#{text[i,len]}\r"
  sleep 0.1
}
print"\n"

STDOUT.sync = true が大事。

実行すると,順に表示されるはずが,数秒後一気に出力されてしまう。

これは,バッファリングされていることが原因なので,それを抑止する,

STDOUT.sync = true

をプログラムの頭に書いてやる事により解決した。

putsだときちんとsleepされるのに,printだとバッファされるのは何ででしょ。

rubyでsleepが機能しない( ∵ バッファリング): m6 BLOG

tags: ruby

Posted by NI-Lab. (@nilab)