0

我想在终端/控制台中显示时间,每经过一秒,我希望之前的时间被删除并替换为新的时间(这将再多一秒)。但是,当我运行我的程序时,它不是每秒显示一次而是两秒显示一次。我的代码看起来有点愚蠢,但我不知道是否有办法修改它。这是我的代码:

import time
import os

while True:
    print(time.strftime('%H:%M:%S'))
    os.system('clear')

因此,例如,如果我在 08:12:33 执行此代码,这将是结果: -First: 08:12:33 -Screen is clear -Then : 08:12:35 -Screen is clear -Then : 08 : 12:37 - 屏幕被清除。. .

任何帮助、修改或提示将不胜感激。

EDITION: 首先,感谢大家的各种提示和答案。由于你们中的许多人都说代码在您的控制台上运行良好,我还想补充一点,我正在 VS Code 控制台上运行此代码。尽管您的代码在您的控制台上运行良好,但我无法达到所需的输出。这可能是我的控制台有问题吗?也许它无法跟踪速度?

4

4 回答 4

3

使用转义序列(\033[2J用于清除和\033[H归位光标)清除屏幕比生成子进程要快:

import time

while True:
    print('\033[2J\033[H'+time.strftime('%H:%M:%S'))
    time.sleep(1)

或使用诸如cursesansi等库,这些库应该提供对这些原始转义序列的抽象。

于 2020-08-31T15:31:22.010 回答
1

使用调度程序

import os, sched, time

s = sched.scheduler(time.time, time.sleep)

def print_time(s):
    s.enter(1, 1, print_time, (s,))
    os.system('clear')
    print(time.strftime('%H:%M:%S'))
                                             
s.enter(1, 1, print_time, (s,))
s.run()                                      
于 2020-08-31T15:35:20.077 回答
0

我使用 os.system('cls') 对我来说效果很好

import time
import os

time.ctime()
while True:
    print(time.strftime('%H:%M:%S'))
    os.system('cls')
于 2020-08-31T15:36:52.747 回答
0

这不是正在发生的事情——你一直在不停地打印时间(在我的控制台上这确实显示了每一个变化,但在你的控制台上可能不会)。你应该在打印之间睡觉,这样你就不会错过任何东西。顺便说一句, time.ctime() 是无关紧要的。您没有使用返回值。

尝试这个:

import time
import os

while True:
    print(time.strftime('%H:%M:%S'))
    time.sleep(0.3)
    os.system('clear')

于 2020-08-31T15:29:01.223 回答