python - 在 python shell 中运行一个基本的数字时钟

标签 python shell clock digital

我想在 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

我知道这很粗糙,我还在学习。我只想要一条线, shell 中有一个“滴答作响”的数字时钟。我在闲置和 Windows 10 上使用 python 3.5.1。

如果这不可能,我很想知道为什么。

非常感谢

最佳答案

如果您只是每次都像这样打印出固定长度的输出,只要不打印换行符,就可以使用回车符返回到行首。示例:

# Note trailing comma, that suppresses the newline in Python
print ("%s/%s/%s %s:%s:%s" % (now.month,now.day,now.year,now.hour,now.minute,now.second)),

# Now rewind back to the start of the line. Again, not trailing comma
print("\r"),

现在,您可能还会注意到屏幕上没有打印任何内容。这是因为标准输出是缓冲的,所以你可以用这个刷新:

# At the top...
import sys

# In the loop, after the first print
sys.stdout.flush()

这一切的工作原理如下。想象一下屏幕上实际上有一个光标。您首先使用第一次打印(和冲洗)打印出时间,然后使用 print("\r"), 将光标移回行首。这实际上并没有删除任何字符,它只是移动了光标。然后你下次再写出来。因为恰好恰好是完全相同的长度,所以时间被再次写出,替换了旧字符。

生成的脚本如下:

import time
import sys

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)),
    sys.stdout.flush()
    print("\r"),
    time.sleep(1)

如果您想更精细地控制正在发生的事情,您可以开始使用 curses 库,但我认为这对于您在这里尝试做的事情来说有点过分了。

编辑:正如@PadraicCunningham 在评论中提到的,在 Python 3 中禁止换行打印并强制内容刷新到屏幕的正确语法如下:

print("hello", flush=True, end="")

此外,正如@AlexHall 提到的,打印语句实际上并不打印固定宽度的语句;所以要做到这一点,我们应该改用 strftime()

因此正确的程序是:

import time

while True:
    from datetime import strftime
    print (strftime("%m/%d/%Y %H:%M:%S"), end="", flush=True)
    print("\r", end="", flush=True)
    time.sleep(1)

关于python - 在 python shell 中运行一个基本的数字时钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37515587/

相关文章:

python - "Cannot access setup.py: No such file or directory"- 无法运行任何 .py 文件?

python - 比较 django 的上下文变量

用于创建过程的 MySQL Shell 脚本

Java 时钟项目 - 勾选方法输出 "0"而不是 "00"分钟和秒,修复 AM PM 的输出

java - Android中的时间粒度是多少?

用 C 计算算法运行时间

python - Tarjan 算法 - Python 到 scala

shell - Ubuntu 出错了,因为使用了 mv/*

python - 模块 python-twitter (github) 从 shell 给出错误 "No Module named cmdline"

python - 如何为缺失值分组添加 NaN