Python Script: каждый раз печатать новую строку для оболочки, а не обновлять существующую строку

Я пишу, когда дело доходит до python. У меня есть python script, который дает мне вывод следующим образом:

[last] ZVZX-W3vo9I: Downloading video webpage
[last] ZVZX-W3vo9I: Extracting video information
[download] Destination: myvideo.flv
[download]   9.9% of 10.09M at    3.30M/s ETA 00:02

Последняя строка продолжает обновляться новыми значениями прогресса. Я хочу изменить это. Вместо обновления я хочу, чтобы каждый раз печаталась новая строка. Как я могу это сделать? Я думаю, что эта часть - это бит:

def report_progress(self, percent_str, data_len_str, speed_str, eta_str):
    """Report download progress."""
    self.to_stdout(u'\r[download] %s of %s at %s ETA %s' %
        (percent_str, data_len_str, speed_str, eta_str), skip_eol=True)

Если нужно увидеть больше кода, пожалуйста, дайте мне знать, чтобы я мог показать вам, что необходимо для решения этой проблемы.

Большое спасибо за любую помощь.

Ответ 1

Если я правильно понимаю ваш запрос, вы должны изменить эту функцию:

def report_progress(self, percent_str, data_len_str, speed_str, eta_str):
    """Report download progress."""
    print u'[download] %s of %s at %s ETA %s' % (percent_str, data_len_str, speed_str, eta_str)

Это будет печатать вывод на новой строке каждый раз.

Ответ 2

Я думаю, вам просто нужно изменить:

skip_eol=True

в

skip_eol=False

и избавиться от "\r", чтобы узнать, что произойдет. Я думаю, вы будете приятно удивлены: -)

Ответ 3

Вы можете вынуть \r, который переместится к курсору обратно в начало строки и выведет skip_eol = True, вероятно. Возможно:

   self.to_stdout(u'[download] %s of %s at %s ETA %s' %
        (percent_str, data_len_str, speed_str, eta_str))

Ответ 4

Эффект "обновления" достигается с помощью "\ r".

Попробуйте это в оболочке Python (2.x):

print "00000000\r1111"

\ r просто возвращает курсор в начало строки.