Написание ранее выходных строк в командной строке с рубином
Я запускал программы командной строки, которые выводят строку, а затем обновляют эту строку через минуту. Но с 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
для генерации вывода, который явно не предназначен для этого случая. Есть ли другой способ вывода, который может достичь этого результата?
Ответы
Ответ 1
Используйте \r
, чтобы переместить курсор в начало строки. И вы не должны использовать puts
, поскольку он добавляет \n
, вместо этого используйте print
. Вот так:
print "11MB 294K/s"
print "\r"
print "12MB 307K/s"
Следует иметь в виду, что: \r
ничего не удаляет, он просто перемещает курсор назад, поэтому вам нужно будет пропустить вывод с пробелами, чтобы перезаписать предыдущий вывод (в случае, если он был длиннее).
По умолчанию, когда \n
печатается на стандартный вывод, буфер сбрасывается. Теперь вам может понадобиться использовать STDOUT.flush
после print
, чтобы текст сразу распечатывался.