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

2023-12-07

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

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

import calendar, time

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

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

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

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

一般来说,这样做有一个问题:回车符不会删除现有文本,它只是让您覆盖它。那么,如果新值比旧值短怎么办?嗯,就你的情况而言,这是不可能的;你正在打印一个 10 位数字,它永远不会变成 9 位数字。但如果它were一个问题,最简单的解决方案就是改变它{}类似的东西{<70},它将用空格填充短行,最多 70 个字符。 (当然,如果您的行可能超过 70 个字符,或者您的终端可能比 70 个窄,请不要使用该数字。)


同时,如果您只是尽可能快地一遍又一遍地执行此操作,则会浪费大量 CPU 和 I/O,并且可能会搞砸终端的回滚缓冲区,谁知道还会发生什么。如果你想每秒执行一次,你应该sleep中间有一秒钟。

So:

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

如果你想变得更奇特,你可以用以下命令接管整个航站楼curses在大多数非 Windows 平台上,msvcrtWindows 上的控制台 I/O,甚至手动打印终端转义序列。但你可能不想变得花哨。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中的动态单行打印(时间?) 的相关文章

随机推荐