Печатайте правильно в консоли - PullRequest
2 голосов
/ 25 мая 2011

Когда я пишу скрипт, который обновляет напечатанную строку, например, так:

for i in range(101):
    print(str(i) + "% \r", end="")

и запустить этот скрипт с помощью терминала (Ubuntu), я получаю правильный вывод, который обновил строку:

100%

Однако, используя Pydev в Eclipse, консоль Eclipse делает это:

0%
1%
2%
...
100%

Кто-нибудь знает, как это исправить? Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 04 апреля 2013

Это потому, что 'print' всегда генерирует новую строку всякий раз, когда вы используете \ r или нет, попробуйте вместо sys.stdout:

import time, sys

for i in range(101):
    sys.stdout.write(str(i) + "% \r")
    sys.stdout.flush()
    time.sleep(.3)
0 голосов
/ 25 мая 2011

Кажется, это старая проблема CR LF. В зависимости от используемой ОС и консоли CR и LF в качестве завершения линии будут интерпретироваться по-разному.

Некоторые системы требуют CRLF в качестве конца строки. Некоторые системы требуют только LF, но делают CR неявно. Некоторые системы (например, ваша) неявно выполняют LF перед каждым CR, хотя я вижу это впервые.

Возможно, есть способ отредактировать настройки новой строки для вашей консоли PyDev.

РЕДАКТИРОВАТЬ: Или вы можете использовать управляющие коды ANSI для перемещения курсора. Как CSInD для n символов слева или CSInC для n символов справа.

...