Запись поверх ранее выведенных строк в командной строке с помощью ruby - PullRequest
20 голосов
/ 21 января 2011

Я запустил программы командной строки, которые выводят строку, а затем обновляют ее через мгновение. Но с помощью ruby ​​я могу только вывести строку, а затем другую строку.

Что у меня сейчас выводится:

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 Ответ

39 голосов
/ 21 января 2011

Используйте \r, чтобы переместить курсор в начало строки.И вам не следует использовать puts, поскольку он добавляет \n, вместо этого используйте print.Например:

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

Следует помнить одну вещь: \r не ничего не удаляет , он просто перемещает курсор назад, поэтому вам нужно будет дополнить выводс пробелами для перезаписи предыдущего вывода (если он был длиннее).

По умолчанию, когда на стандартный вывод выводится \n, буфер очищается.Теперь вам может понадобиться использовать STDOUT.flush после print, чтобы убедиться, что текст печатается сразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...