Подтвердить что ты не робот

Написание ранее выходных строк в командной строке с рубином

Я запускал программы командной строки, которые выводят строку, а затем обновляют эту строку через минуту. Но с 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 ​​ script выходов, которая показывает, что загруженный размер файла и скорость передачи будут перезаписаны каждый раз, а не перечислять обновленные значения как целую новую строку.

В настоящее время я использую puts для генерации вывода, который явно не предназначен для этого случая. Есть ли другой способ вывода, который может достичь этого результата?

4b9b3361

Ответ 1

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

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

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

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