[英]Dynamic single-line printing in Python (time?)
我想制作一个简单的时钟(CLI),将时间打印成一行,并每秒更新一次。 这甚至可能吗? 我应该每秒打印一行吗?
这就是我目前所拥有的,它的功能非常强大:
import calendar, time
a = 1
while a == 1:
print (calendar.timegm(time.gmtime()))
print
函数在传递的字符串后打印换行符( \\n
)。 指定回车符( \\r
)显式执行您想要的操作。
要每秒打印一次,请在打印后调用time.sleep(1)
。
import calendar
import time
while 1:
print(calendar.timegm(time.gmtime()), end='\r')
time.sleep(1)
UPDATE
要使光标保持在行的末尾,请前置\\r
:
print('\r', calendar.timegm(time.gmtime()), sep='', end='')
如果我理解,你想要做的是写时间,然后,一秒钟后,用新时间覆盖它,依此类推。
在大多数终端上,打印没有换行符的回车将带您回到同一行的开头。 所以,你几乎可以这样做:
print('\r{}'.format(calendar.timegm(time.gmtime())), end='')
一般来说,这有一个问题:回车不会删除现有文本,它只是让你覆盖它。 那么,如果新值比旧值短,会发生什么? 那么,在你的情况下,这是不可能的; 您正在打印一个10位数字,永远不会变成9位数字。 但如果它是一个问题,最简单的解决方案是将{}
更改为{<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,甚至可以手动打印终端转义序列。 但你可能不想得到幻想。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.