2016-01-09 2 views
5

Я пишу индикатор выполнения, как это предлагает How to animate the command line?. Я использую Pycharm и запускаю этот файл в окне Run Tool.Python3: print (somestring, end = ' r', flush = True) ничего не показывает

import time 
def show_Remaining_Time(time_delta): 
    print('Time Remaining: %d' % time_delta, end='\r', flush=True) 

if __name__ == '__main__': 
    count = 0 
    while True: 
     show_Remaining_Time(count) 
     count += 1 
     time.sleep(1) 

Однако код не отображается, если я запустил этот .py-файл. Что я делаю не так?


Я попытался Jogger предполагают, но это все еще не работает, если я использую print функцию.

Однако следующий сценарий работает так, как ожидалось.

import time 
import sys 
def show_Remaining_Time(time_delta): 
    sys.stdout.write('\rtime: %d' % time_delta) # Doesn't work if I use 'time: %d\r' 
    sys.stdout.flush() 
if __name__ == '__main__': 
    count = 0 
    while True: 
     show_Remaining_Time(count) 
     count += 1 
     time.sleep(1) 

У меня есть 2 вопроса теперь:

  1. Зачем Stdout работает, но печать() нет.

  2. Почему How to animate the command line? предлагает добавить \r до конца, пока я должен написать его с самого начала в моем случае?

+1

Прекрасно работает для меня в интерактивном интерпретаторе. Вы бежите в странной оболочке, случайно, скажем, в оболочке IDLE? – ShadowRanger

+0

@ShadowRanger Я запускаю его с помощью окна Run Run Pycharm. Если я не передаю 'end = '\ r'', он печатает как обычно. Но я хочу продолжать обновлять одну и ту же строку. – spacegoing

+0

Да, окно запуска PyCharm не является обычным терминалом. Он не обрабатывает возврат каретки так, как вам может захотеть. Запустите в обычной командной строке. – ShadowRanger

ответ

0

Проблема в том, что '\ r' в конце очищает строку, которую вы только что напечатали, что?

import time 
def show_Remaining_Time(time_delta): 
    print("\r") 
    print('Time Remaining: %d' % time_delta, flush=True) 

if __name__ == '__main__': 
    count = 0 
    while True: 
     show_Remaining_Time(count) 
     count += 1 
     time.sleep(1) 

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

+2

На большинстве терминалов я знаю, что '\ r' ничего не понимает. Он перемещает курсор, но требуется дополнительный выход, чтобы перезаписать то, что есть. Кроме того, вы не отключите автоматическую новую строку для любой из ваших отпечатков, поэтому чистый эффект заключается в том, чтобы печатать каждый вывод на новой строке; явная '' \ r''' print' ничего не делает. – ShadowRanger

+0

Другие проблемы в стороне (как не используя end = ''), это сделало трюк для меня. – arielnmz

+0

Мне пришлось использовать 'print ('\ r', end = '')' и 'print ('output', end = '', flush = True)', чтобы сделать эту работу так, как я ожидал. Спасибо за хорошую отправную точку! –

0
this method u can print in same command line: 
import time 
def show_Remaining_Time(time_delta): 
    print(' \r%d:Time Remaining' % time_delta, end = '',flush=False) 

if __name__ == '__main__': 
    count = 0 
    while True and count < 10: 
     show_Remaining_Time(count) 
     count += 1 
     time.sleep(1) 
Смежные вопросы