You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何同时运行两个独立while循环实现实时时钟与交互菜单

问题解决方法

你没法同时运行两个阻塞式的while循环——时间循环里的sleep(1)、菜单循环里的input()都会卡住单线程的执行流程,要实现顶部时间自动刷新+菜单正常交互,用后台线程跑时间刷新逻辑,搭配终端光标控制固定时间的刷新位置即可,不会打乱输入区域。


完整可运行代码

import threading
import sys
import colorama
from time import sleep, strftime, gmtime
from colorama import Fore

# 全局退出标记,供两个线程同步状态
exit_flag = False

def refresh_top_time():
    """后台线程函数:每秒刷新顶部固定位置的时间"""
    while not exit_flag:
        # 保存当前光标位置
        sys.stdout.write("\033[s")
        # 把光标移动到终端第1行第1列
        sys.stdout.write("\033[1;1H")
        # 清空当前行旧的时间内容
        sys.stdout.write("\033[2K")
        # 写入最新时间
        current_time = strftime("%a, %d %b %Y %I:%M:%S %p %Z", gmtime())
        sys.stdout.write(current_time)
        # 把光标恢复到之前的输入位置,不打断用户输入
        sys.stdout.write("\033[u")
        sys.stdout.flush()
        sleep(1)

def menu_1():
    print("执行菜单1对应逻辑")

def menu_2():
    print("执行菜单2对应逻辑")

if __name__ == "__main__":
    colorama.init() # 初始化colorama,Windows终端也能正常识别光标控制码
    # 预留顶部两行位置:第一行放时间,第二行留空
    print("\n")
    # 启动时间刷新的守护线程,主线程退出时该线程自动终止
    time_daemon = threading.Thread(target=refresh_top_time, daemon=True)
    time_daemon.start()

    # 正常跑菜单循环
    while not exit_flag:
        menu_tip = (
            "[1] Menu1\n"
            "[2] Menu2\n"
            "[3] Exit\n"
            f"{Fore.RESET}请输入选项: "
        )
        choice = input(menu_tip)
        if choice == "1":
            menu_1()
        elif choice == "2":
            menu_2()
        elif choice == "3":
            print("Exiting...")
            exit_flag = True
        else:
            print("无效选项,请重新输入")
            sleep(0.5)

关键注意点

  • 你原来贴的时间打印代码里,print(strftime(...))缺少右括号,直接运行会触发语法错误,记得补上
  • 不要直接顺序写两个while循环:单线程下阻塞调用会导致要么时间不刷新,要么菜单没法输入
  • 用ANSI光标控制码刷新时间的方式,不会像普通print一样每次刷时间都新起一行,也不会冲掉用户输入到一半的内容,界面和你预期的效果完全一致
  • 时间线程设置为守护线程+全局退出标记,退出程序时不会残留后台进程卡终端

内容的提问来源于stack exchange,提问作者Alan Z.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 09:57:19