2017年9月23日土曜日

clojureで改行なしのlogを表示する方法


詰まりながらも実現できたのでメモを残します。

動作確認環境

下記の環境で動作確認しました。
OS: ubuntu
leiningen: 2.7.1
clojure: 1.8.0
java: open-jdk-1.8

方法

print」「\r」「flush」を使います。
下記の例では数値を3桁表示するために、「format」も利用しました。

(defn one-line-log [fps]
  (print "\r" (format "%3dfps" fps))
  (flush))

上記の関数をループの中で呼ぶと、改行せずに出力してくれます。


注意点

\rの位置について

\rをprintの最後に配置すると、カーソルが基本的に行の先頭に来るので、プログラムを終えるとその行の内容が消えてしまいます。
そのため、\rはprintの第一要素にすることをお勧めします。

flashについて

printだけではログを出力してくれませんでしたが、printを記述した後にflushを記述すると期待通りに出力してくれました。

共有したい情報は以上です。

参考

Order changes when using print vs println

0 件のコメント :

コメントを投稿