【问题标题】:How can I have a quicker output in this python program?如何在这个 python 程序中获得更快的输出?
【发布时间】:2020-08-31 15:23:30
【问题描述】:

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

import time
import os

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

例如,如果我在 08:12:33 执行此代码,结果如下: -第一:08:12:33 - 屏幕被清除 -然后:08:12:35 - 屏幕被清除 -然后:08:12:37 - 屏幕被清除 . . .

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

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

【问题讨论】:

  • 请注意,os.system('clear') 是迄今为止这段代码中最慢的东西。
  • @Liana 另一个问题,你在 Windows 上吗?如果是这样,您使用的是哪个控制台?

标签: python python-3.x time


【解决方案1】:

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

import time

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

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

【讨论】:

  • 更进一步,使用 curses 库将是一个改进。您不必学习控制代码,并且行为与设备无关。
  • 这帮助我每秒钟修改一次秒数,但结果每次都会向前跳两秒。就像如果它是 38,那么一秒钟后它会显示 40,但它必须是 39。
  • @Liana 去掉时间延迟
  • @okawo 但没有任何变化。
  • @Liana 你确定吗? while 1: print('\033[2J\033[H'+time.strftime('%H:%M:%S')) 对我来说不仅没有跳秒,它几乎与我的系统面板时钟同步
【解决方案2】:

使用调度器

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()                                      

【讨论】:

  • 输出对我来说没有改变:(
  • 你用的是什么版本的python?在 python 3.8 上对我来说效果很好
  • 我使用的是 3.8.5
【解决方案3】:

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

试试这个:

import time
import os

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

【讨论】:

  • time.sleep(1) 可能会更好,因为它只显示秒数
  • 我猜,但问题是您希望与实际时间有多接近 - 如果您希望打印时间尽可能接近“真实”秒的变化,那么您想要尽可能低的睡眠(0.3 显然是任意的,但 1 是尽可能远的 - 再远,您可能会错过第二次更改)
  • 遗憾的是我复制粘贴了你刚刚写的内容,结果是一样的……我只能每 2 秒看到一次
【解决方案4】:

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

import time
import os

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

【讨论】:

  • 奇怪的是,我如何将相同的代码复制粘贴到我的 IDE 中,但控制台给了我同样的问题,我解释了......也许这不是我的代码而是我的控制台的问题?也许我的无法跟踪它?
  • 我想这可能是你的控制台,因为我的工作对我有用
  • 我也这么认为。谢谢你:')
猜你喜欢
  • 2020-05-04
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
相关资源
最近更新 更多