Как переписать вывод в терминал - PullRequest
20 голосов
/ 15 августа 2010

У меня есть скрипт Python, и я хочу, чтобы он отображал увеличивающееся число от 0 до 100% в терминале.Я знаю, как печатать числа на терминале, но как я могу «переписать» их так, чтобы 0 превращалось в 1, 1 в 2 и так далее до 100?

Ответы [ 4 ]

24 голосов
/ 15 августа 2010

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

import time
import sys
for i in range(100):
    print i,
    sys.stdout.flush()
    time.sleep(1)
    print "\r",

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

5 голосов
/ 15 августа 2010

Этот рецепт здесь должен оказаться полезным.Используя этот модуль в качестве tc, следующий код делает то, что вам нужно:

from tc import TerminalController
from time import sleep
import sys

term = TerminalController()

for i in range(10):
    sys.stdout.write("%3d" % i)
    sys.stdout.flush()
    sleep(2)
    sys.stdout.write(term.BOL + term.CLEAR_EOL)

Рецепт использует terminfo для получения информации о терминале и работает в Linux и OS X для ряда терминалов.Это не работает на Windows, хотя.(Спасибо piquadrat за тестирование, согласно комментарию ниже).

Редактировать : рецепт также дает возможность использовать цвета и переписать часть строки.Он также имеет готовый текстовый индикатор выполнения.

3 голосов
/ 17 марта 2014

Используя пакет благословений - очистите экран (clear / cls) и введите:

import sys
from blessings import Terminal
from time import sleep # <- boy, does this sound tempting a.t.m.

term = Terminal()
for i in range(6):
    with term.location(term.width - 3, term.height - 3):        
        print('{}'.format(i))
    sleep(2)
    if (i == 3):
        print('what was I doing, again?')
print('done')

Чтобы установить его из CheeseShop, просто ...

pip install blessings
0 голосов
/ 29 июня 2011

На основании этого ответа , но без контроллера терминала:

import time
import sys
for i in range(100):
    sys.stdout.write("Downloading ... %s%%\r" % (i))
    sys.stdout.flush()
    time.sleep(1)

Проверено на терминале GNOME (Linux) и консоли Windows.

Совет: Не делайтеЗапустите этот пример в редакторе IDLE.

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