【问题标题】:Print time that updates automatically自动更新的打印时间
【发布时间】:2021-11-04 18:08:00
【问题描述】:

我想以小时和分钟为单位在屏幕上打印当前时间,该时间会自动更新而无需换行,并打印另一行,秒数也会自动更新到第二行。提前致谢!这是我目前所拥有的:

import time
from datetime import datetime

while True:
    now = datetime.now()
    current_time = now.strftime("%I:%M %p")
    current_second = now.strftime("%S")
    print("\r" + "Clock: ", current_time, end= ' ')
    print("\r" + "\n" + "Seconds: ", current_second, end=' ')
    time.sleep(1)

这是输出的样子:Output

他们应该的秒数,但时间没有

【问题讨论】:

  • print 将字节发送到流。大多数终端都有一些控制字符来控制字符在屏幕上的打印位置,但这取决于程序运行的终端或仿真。
  • 我不太确定我是否遵循...
  • 不,我知道如何在同一行打印,但我希望将秒数分开打印,让两行自动更新
  • @TasmanOrkiszewski this answer 怎么样?这对你有帮助吗?
  • @TasmanOrkiszewski 对不起,我不知道该告诉你什么。我只是在 IPython 和常规终端中运行它,它就像在 GIF 中一样工作。听起来您可能需要使用指定的 IDE 更新您的问题,并说明一般解决方案无法在那里工作的任何原因。

标签: python python-3.x time line clock


【解决方案1】:

@Rhuamer 的答案与您的代码相结合,您可以执行以下操作:

import subprocess
import sys
import time
from datetime import datetime

clear = "cls" if sys.platform == "win32" else "clear"
while True:
    now = datetime.now()
    current_time = now.strftime("%I:%M %p")
    current_second = now.strftime("%S")
    print(f"\rClock: {current_time}", flush=True, end="\n")
    print(f"Seconds: {current_second}", flush=True, end="")
    time.sleep(1)
    subprocess.run(clear, shell=True)

【讨论】:

  • 当我尝试运行此imgur.com/a/znNOOdO时出现这些错误@
  • @TasmanOrkiszewski 您在 Windows PC 上使用什么 shell?
  • 我只是在使用 pycharm...在 python 类中,我们使用的是基于 web 的 python,但是无法导入我需要的所有模块,所以我切换到 pycharm...我认为那是我所需要的一切
  • @TasmanOrkiszewski 请检查更新,我添加了shell=True 参数。
  • 现在它可以运行某些东西,但它不会覆盖小时和分钟,只会覆盖秒。这是另一个shell问题吗? imgur.com/a/wFHbtas
【解决方案2】:

这个问题的核心是关于如何清除控制台,这里有很多很好的答案Clear terminal in Python,我建议你去探索一下。问题的另一部分涉及多行书写,所以我觉得这不是完全重复。

我认为获得所需内容的最简单方法可能是使用 f-string 并简单地执行以下操作:

import time
from datetime import datetime

while True:
    now = datetime.now()
    current_time = now.strftime("%I:%M %p")
    current_second = now.strftime("%S")
    print(f"\033cClock: {current_time}\nSeconds: {current_second}")
    time.sleep(1)

如果这不能正常工作,您可以探索其他稍微扩展的转义码,例如\033c\033[3J。我已经在几个终端上成功地测试了\033c

如果在查看其他问题后,您觉得这是重复的,请告诉我,我将删除此答案,您可以关闭该问题。

【讨论】:

  • 我喜欢你的回答,它适用于我使用的所有终端,除了使用 Windows default console window 选项的 GitBash,但适用于使用 use MinTTY (the default terminal of MSYS2) 选项安装的 GitBash。
  • 是的,这可能只适用于支持 ansi 转义的终端,所以除了没有注册表项的 cmd 和 powershell 之外的所有东西
【解决方案3】:

尝试使用 clear 方法清除控制台。像这样定义它:

from os import system, name

if name == "nt":
    clear = lambda: system("cls")
else:
    clear = lambda: system("clear")

然后每次循环调用它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    相关资源
    最近更新 更多