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

Python如何同时在两个输出行分别运行无限循环按指定间隔打印字符

Python实现两行独立并行滚动打印的方案

核心思路

单线程下两个无限while循环会互相阻塞,所以需要用多线程并行执行两个打印任务,同时通过ANSI转义序列控制终端光标位置,保证两个行的打印内容互不干扰。

完整实现代码

import threading
import time
import os

# 适配Windows终端开启ANSI转义支持,Linux/macOS环境可删除该行
os.system('')

# 分别记录两行已打印的字符数量
line1_char_cnt = 0
line2_char_cnt = 0
# 线程锁,避免多线程同时操作打印导致光标错位
print_lock = threading.Lock()

def print_line1():
    global line1_char_cnt
    while True:
        time.sleep(3)
        with print_lock:
            # 光标跳转到第一行当前末尾位置,打印*
            print(f"\033[1;{line1_char_cnt * 2 + 1}H*", end=" ", flush=True)
            line1_char_cnt += 1
            # 光标复位到第二行末尾,不影响后续打印
            print(f"\033[2;{line2_char_cnt * 2 + 1}H", end="", flush=True)

def print_line2():
    global line2_char_cnt
    while True:
        time.sleep(5)
        with print_lock:
            # 光标跳转到第二行当前末尾位置,打印$
            print(f"\033[2;{line2_char_cnt * 2 + 1}H$", end=" ", flush=True)
            line2_char_cnt += 1
            # 光标复位到第二行末尾
            print(f"\033[2;{line2_char_cnt * 2 + 1}H", end="", flush=True)

if __name__ == "__main__":
    # 先输出两行空内容占位,避免初始光标位置错误
    print()
    print()
    # 启动两个打印守护线程
    threading.Thread(target=print_line1, daemon=True).start()
    threading.Thread(target=print_line2, daemon=True).start()
    # 主线程保持运行,按Ctrl+C可终止程序
    while True:
        time.sleep(1)

关键说明

  • ANSI转义序列\033[行号;列号H可以将终端光标定位到指定位置,终端行号、列号均从1开始计数,这里每个字符加空格占2位,所以列号按字符数*2计算
  • 加线程锁是为了保证同一时间只有一个线程操作光标和打印,避免出现输出内容错位
  • flush=True强制刷新输出缓冲区,保证内容立刻显示到终端,不会等到缓冲区满或者换行才输出
  • 守护线程设置daemon=True,可以保证主线程退出时两个打印线程自动销毁,不会残留后台进程

内容的提问来源于stack exchange,提问作者Mohammad Javad Alizadeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:06:00