Динамическая однострочная печать в Python (время?)

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

Это то, что у меня есть на данный момент, которое ужасно функционирует:

import calendar, time a = 1 while a == 1: print (calendar.timegm(time.gmtime())) 

  • Сложность len () в отношении наборов и списков
  • Лучший способ доступа к N-й строке файла csv
  • Абстрактные классы и PyMongo; не может создавать абстрактный класс
  • Вложенные f-строки
  • vscode python переходит к символу, который не работает
  • TypeError: '<=' не поддерживается между экземплярами 'str' и 'int'
  • Как изменить переменную после того, как она уже определена в Python
  • Как запустить python 2 и 3 в Windows 7?
  • 2 Solutions collect form web for “Динамическая однострочная печать в Python (время?)”

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

    На большинстве терминалов печать возврата каретки без новой строки вернет вас к началу той же строки. Итак, вы почти можете это сделать:

     print('\r{}'.format(calendar.timegm(time.gmtime())), end='') 

    В общем, есть проблема с этим: возврат каретки не стирает существующий текст, он просто позволяет вам перезаписать его. Итак, что произойдет, если новое значение короче старого? Ну, в вашем случае это невозможно; вы печатаете 10-значный номер, который никогда не может превратиться в 9-значное число. Но если это была проблема, самым простым решением было бы изменить это {} на что-то вроде {<70} , которое будет заполнять короткую строку пробелами до 70 символов. (Конечно, если ваши строки могут быть длиннее 70 символов, или ваш терминал может быть уже 70, не используйте этот номер.)


    Между тем, если вы просто делаете это снова и снова как можно быстрее, вы тратите много CPU и ввода-вывода и, возможно, закручиваете буфер прокрутки своего терминала, и кто знает, что еще. Если вы хотите делать это один раз в секунду, вы должны sleep в течение секунды между ними.

    Так:

     while True: print('\r{}'.format(calendar.timegm(time.gmtime()))) time.sleep(1) 

    Если вы хотите получить фантазию, вы можете взять на себя весь терминал с curses на большинстве платформ, msvcrt от Windows, консольный ввод / вывод msvcrt в Windows или даже ручную печать msvcrt последовательностей терминала. Но вы, вероятно, не хотите проявлять фантазию.

    print function print newline ( \n ) после строки, которую вы передали. Указать возврат каретки ( \r ) явно делает то, что вы хотите.

    Чтобы печатать каждую секунду, вызовите time.sleep(1) после печати.

     import calendar import time while 1: print(calendar.timegm(time.gmtime()), end='\r') time.sleep(1) 

    ОБНОВИТЬ

    Чтобы курсор оставался в конце строки, добавьте \r :

     print('\r', calendar.timegm(time.gmtime()), sep='', end='') 
    Python - лучший язык программирования в мире.