コマンドプロンプトで以前に出力された行をRubyで上書きする 質問する

コマンドプロンプトで以前に出力された行をRubyで上書きする 質問する

1 行を出力し、しばらくしてからその行を更新するコマンド ライン プログラムを実行しました。しかし、Ruby では 1 行を出力してから別の行を出力することしかできないようです。

現在出力されているもの:

Downloading file:
11MB 294K/s
12MB 307K/s
14MB 294K/s
15MB 301K/s
16MB 300K/s
Done!

代わりに、私はこれを見たいです:

Downloading file:
11MB 294K/s

少し経ってから、次のメッセージが続きました。

Downloading file:
16MB 300K/s
Done!

私の Ruby スクリプトが出力する、ダウンロードしたファイルのサイズと転送速度を示す行は、更新された値全体を新しい行としてリストするのではなく、毎回上書きされます。

現在、出力を生成するために を使用していますputsが、明らかにこのケース向けに設計されていません。この結果を達成できる別の出力方法はありますか?

ベストアンサー1

\rカーソルを行の先頭に移動するにはを使用します。putsは を追加するので使用しないでください。代わりに を使用してください。次のようになります\nprint

print "11MB 294K/s"
print "\r"
print "12MB 307K/s"

ただし、覚えておいてほしいのは\r消去何もしない場合は、カーソルを戻すだけなので、前の出力を上書きするには出力にスペースを埋め込む必要があります (前の出力の方が長い場合)。

デフォルトでは、\n標準出力に印刷されるとバッファがフラッシュされます。テキストがすぐに印刷されるようにするには、 STDOUT.flushafterを使用する必要があるかもしれません。print

おすすめ記事