首页 > 解决方案 > 循环中的控制台输出:如何在不添加换行符的情况下完全清除最后一个 cat 输出?

问题描述

我经常将以下内容添加到循环中以打印出每次迭代的一些消息。

for (word in c("a", "long message", "c")) {
  cat("\r", word)
  flush.console()
  Sys.sleep(1)
}

在此处输入图像描述

如我们所见,该消息"c"仅覆盖了前一个"long message". 我想避免这种情况。我唯一能想到的是添加额外的空白,例如

for (word in c("a", "long message", "c")) {
  cat("\r", word, "                ")
  flush.console()
  Sys.sleep(1)
}

回车后是否有更好的方法来获取干净的消息?请注意,我不想要换行符。

更新:@user1981275 发布了一个已确认可在 Linux 上运行的解决方案。仍然需要独立于平台的解决方案。

标签: rloops

解决方案


ANSI Erase to end of line转义序列\033[K可以与cat(参见例如here)一起使用:

for (word in c("a", "long message", "c")) {
  cat("\r", "\033[K", word)
  flush.console()
  Sys.sleep(1)
}

推荐阅读