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

Python打印内容时如何避免控制台自动关闭且不阻塞程序运行

Python程序实时打印进度时控制台自动关闭的解决方案

核心原因

  • 原有代码的loading线程完成进度打印后调用了sys.exit(),会直接终止整个进程,导致控制台自动关闭
  • 即使删除sys.exit(),Windows系统下直接双击运行.py文件、或打包成exe运行时,所有线程执行完毕后控制台也会默认自动关闭
  • 非阻塞的等待逻辑只要放在所有业务流程执行完成之后,就不会影响解压、实时清屏打印进度的正常运行

修正后可直接使用的代码

import threading
import os
import time
import sys

# 请替换为你自己的实际参数
my_zip_file = "你的压缩包完整路径.zip"
my_password = b"压缩包密码" # 无密码可删除extractall的pwd参数
unzip_target_path = "你的解压目标文件夹路径"
count_file_path = unzip_target_path # 统计解压进度的文件夹路径

def unzip_task():
    from zipfile import ZipFile
    with ZipFile(my_zip_file) as zf:
        zf.extractall(unzip_target_path, pwd=my_password)

def progress_print_task():
    done = False
    file_list = []
    while not done:
        try:
            file_list = os.listdir(count_file_path)
            # 跨平台清屏逻辑不变
            clear_console = lambda: os.system('cls' if os.name in ('nt', 'dos') else 'clear')
            clear_console()
            print(f'Installing resources : {int(len(file_list)/25*100)}%')
        except:
            pass
        if len(file_list) == 25:
            done = True
        time.sleep(5)
    # 解压完成后提示
    clear_console()
    print('Installing resources : 100%')
    print('解压完成,控制台已保持开启,可手动关闭窗口')
    # 替换原有的sys.exit(),进入无限低功耗等待,不会阻塞之前的业务流程
    while True:
        time.sleep(3600) # 每次休眠1小时,几乎不占用系统资源

# 启动线程,默认非守护线程会持续运行直到自身逻辑结束
threading.Thread(target=unzip_task).start()
threading.Thread(target=progress_print_task).start()

逻辑说明

  • 解压和实时进度打印的原有逻辑完全保留,全程不需要用户做任何操作,清屏、进度更新功能正常生效
  • 如果你需要解压完成后控制台只保留固定时长再自动关闭,把最后的while True: time.sleep(3600)替换为time.sleep(你需要的秒数)即可
  • 本方案同时适配直接运行.py文件、打包成exe运行两种场景

内容的提问来源于stack exchange,提问作者shanster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:15:01