我想在 python shell 中编写简单的数字时钟。如果可能,我想避免使用 tkinter。这就是我目前拥有的;
import time
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))
time.sleep(1)
这会产生一个重复的打印输出,像这样;
06/29/16 23:08:32
06/29/16 23:08:33
06/29/16 23:08:34
我知道这很粗糙,我还在学习。我只想要一条线,外壳中有一个“滴答作响”的数字时钟。我在闲置和 Windows 10 上使用 python 3.5.1。
如果这不可能,我非常想知道为什么。
衷心感谢
原文由 DanMcGrew 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果你只是每次都像这样打印出一个固定长度的输出,你可以使用回车符返回到行的开头,只要你不打印换行符。例子:
现在,您可能还会注意到屏幕上没有打印任何内容。这是因为标准输出是缓冲的,所以你可以用这个刷新:
这一切的工作方式如下。想象一下屏幕上实际上有一个光标。您首先使用第一次打印(和刷新)打印出时间,然后使用
print("\r"),
将光标移回行首。这实际上并没有删除任何字符,它只是移动了光标。然后你下次再写出来。因为恰好恰好是完全相同的长度,所以时间被再次写出,替换了旧字符。生成的脚本如下所示:
如果你想对正在发生的事情进行更细粒度的控制,你可以开始使用 curses 库,但我认为这对于你在这里尝试做的事情来说有点过分了。
编辑:正如@PadraicCunningham 在评论中提到的,在 Python 3 中禁止换行打印并强制内容刷新到屏幕的正确语法如下:
另外,正如@AlexHall 所提到的,print 语句实际上并不打印固定宽度的语句;所以要做到这一点,我们应该使用
strftime()
代替。因此正确的程序是: