Python中的动态单行打印(时间?)

时间:2014-09-20 01:58:34

标签: python datetime python-3.x

我想制作一个简单的时钟(CLI),将时间打印到一行,然后每秒更新一次。这甚至可能吗?我应该每秒打印一行吗?

这就是我目前所拥有的,其功能非常强大:

import calendar, time

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

2 个答案:

答案 0 :(得分:3)

print函数在您传递的字符串后打印换行符(\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='')

答案 1 :(得分:3)

如果我明白,你想要做的就是写下时间,然后,一秒钟之后,用新时间覆盖它,依此类推。

在大多数终端上,打印没有换行符的回车将带您回到同一行的开头。所以,你可以几乎这样做:

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

一般来说,这有一个问题:回车不会删除现有文本,它只是让你覆盖它。那么,如果新值比旧值短,会发生什么?那么,在你的情况下,这是不可能的;您正在打印一个永远不会变成9位数字的10位数字。但是,如果它 是一个问题,最简单的解决方案是将{}更改为类似{<70}的内容,这将填充带有空格的短行,最多70个字符。 (当然如果您的线路长度超过70个字符,或者您的终端可能比70个更窄,请不要使用该号码。)


与此同时,如果你只是尽快反复这样做,你就会浪费大量的CPU和I / O,并可能搞砸终端的回滚缓冲区,谁知道什么其他。如果你想每秒执行一次,你应该sleep之间的一秒钟。

所以:

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

如果你想获得幻想,你可以在大多数非Windows平台上使用curses接管整个终端,在Windows上使用msvcrt控制台I / O,甚至手动打印终端转义序列。但你可能不想得到幻想。