консольный вывод в циклах: как полностью очистить последний вывод cat без добавления переноса строки? - PullRequest
0 голосов
/ 15 января 2019

Я часто добавляю следующее в циклы, чтобы распечатать некоторые сообщения для каждой итерации.

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

enter image description here

Как видим, сообщение "c" перезаписывает только часть предыдущего "long message". Я хотел бы избежать этого. Единственное, что я могу придумать, это добавить дополнительные пробелы, например,

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

Есть ли лучший способ получить чистое сообщение после возврата каретки? Обратите внимание, что я не хочу разрывов строк.

ОБНОВЛЕНИЕ: @ user1981275 опубликовал решение, которое подтверждено для работы в Linux. Независимые от платформы решения по-прежнему востребованы.

1 Ответ

0 голосов
/ 15 января 2019

ANSI Стирание до конца строки escape-последовательность \033[K может использоваться с cat (см., Например, здесь ):

for (word in c("a", "long message", "c")) {
  cat("\r", "\033[K", word)
  flush.console()
  Sys.sleep(1)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...