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
相关产品推荐
相关产品推荐

