我想制作一个简单的时钟(CLI),将时间打印到一行,然后每秒更新一次。这甚至可能吗?我应该每秒打印一行吗?
这就是我目前所拥有的,其功能非常强大:
import calendar, time
a = 1
while a == 1:
print (calendar.timegm(time.gmtime()))
答案 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,甚至手动打印终端转义序列。但你可能不想得到幻想。