2013-09-11 3 views
0

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

Допустим, у вас есть данная строка коды продуцирующей строки

Оставшегося время: 4

Есть ли способ, как я могу, то после этой строки была отпечатан редактированием значения «4» и измените его на «3», а затем перепечатайте новую строку в той же строке, так что время осталось: 4 заменяется на «Время слева»: 3, не вызывая печать новой строки.

Надеюсь, вы поняли вопрос, который я сделал, чтобы объяснить это.

+1

Это будет стоит начинать, глядя на: HTTPS : //pypi.python.org/pypi/progressbar/2.2 –

+1

И здесь тоже http://stackoverflow.com/questions/4897359/output-to-the-same-line-overwriting-previous-output-python-2- 5 (есть решение python3) –

+0

@SamueleMattiuzzo ahh - это тот, который я пытался найти ... только прогресс бар появился на ум, хотя :) –

ответ

6

Распечатайте возврат каретки (\r) и убедитесь, что ваш оператор print не пишет новую строку, добавив end='' к аргументам печати. После каждого распечатки убедитесь, что вы сбросили stdout с помощью sys.stdout.flush(). Например:

import time 
import sys 

for i in range(4, 0, -1): 
    print('\rTime left:', i, end='') 
    sys.stdout.flush() 
    time.sleep(1) 

На Python 2.x, где print это утверждение вместо функции, просто добавьте Запятая, чтобы предотвратить перевод строки:

import time 
import sys 

for i in range(4, 0, -1): 
    print '\rTime left:', i, 
    sys.stdout.flush() 
    time.sleep(1) 
+0

Это будет печатать только 'Осталось времени: 1'. –

+0

@SamueleMattiuzzo Ой, забыл о необходимости флеша stdout, спасибо. –

+0

Кажется, что напечатано Время слева: для каждого значения i –

2

Один метод печати символа забой побег (\b), который будет перемещать текстовый курсор на один символ назад; однако, вы несете ответственность за то, чтобы напечатать что-то после этого, чтобы заменить текст.

Например, если текущий текст в терминале равен Time left: 4, и вы печатаете "\b", пользователь не увидит, что ничего не изменилось. Однако, если вы печатаете "\b5", он заменит его на 5.

1
3>> for i in range(5, 0, -1): 
... print('\rTime left: {}  '.format(i), end='', flush=True) 
... time.sleep(1) 
... 
Time left: 1  

(примечание: выход будет на самом деле изменения в вашей системе: P)

Смежные вопросы