Если вы только распечатав фиксированную выходную длину, как это каждый раз, вы можете использовать символ возврата каретки, чтобы перемотать на начало строки, до тех пор, пока вы не печатать новой строки. Пример:
# Note trailing comma, that suppresses the newline in Python
print ("%s/%s/%s %s:%s:%s" % (now.month,now.day,now.year,now.hour,now.minute,now.second)),
# Now rewind back to the start of the line. Again, not trailing comma
print("\r"),
Теперь вы также можете заметить, что на экране ничего не печатается. Это связано с тем, что стандартное значение буферизировано, поэтому вы можете выполнить следующие операции:
# At the top...
import sys
# In the loop, after the first print
sys.stdout.flush()
Это все работает следующим образом. Представьте, что на экране есть курсор. Сначала вы распечатываете время с первой печатью (и флешем), затем переместите курсор обратно в начало строки с print("\r"),
. Это фактически не удаляет ни одного из символов, он просто перемещает курсор. Затем вы снова напишите следующий раз. Поскольку это красиво бывает точно такой же длины, время списывается снова, заменяя старые символы.
Полученный сценарий затем следующим образом:
import time
import sys
while True:
from datetime import datetime
now = datetime.now()
print ("%s/%s/%s %s:%s:%s" % (now.month,now.day,now.year,now.hour,now.minute,now.second)),
sys.stdout.flush()
print("\r"),
time.sleep(1)
Если вы хотите тонкоуровневый контроля над тем, что происходит, вы можете начать использовать библиотеку проклятия, но я предполагаю, что это излишнее за то, что вы пытаетесь сделайте здесь.
EDIT: Как @PadraicCunningham упоминалось в комментариях, правильный синтаксис для подавления новой строки печати в Python 3 и заставить содержимое промывать на экране следующее:
print("hello", flush=True, end="")
Кроме того, как отмечает @AlexHall , инструкция print фактически не выводит оператор фиксированной ширины; поэтому для этого мы должны использовать вместо этого strftime()
.
Поэтому правильная программа:
import time
while True:
from datetime import datetime,strftime
now = datetime.now()
print (strftime("%m/%d/%Y %H:%M:%S"), end="", flush=True)
print("\r", end="", flush=True)
time.sleep(1)
Возможный дубликат [Заменить консольный вывод в питоне] (http://stackoverflow.com/questions/6169217/replace-console-output-in-python) –
Я не думаю, что вам будет очень повезло с этим на праздном, я бы порекомендовал вам полностью забыть про простой и использовать ipython или один из многих хороших пионеров python, например pycharm и т. Д. –