PyInstaller打包的Python程序生成.exe后运行即关闭如何解决?
解决PyInstaller打包exe后窗口自动关闭的问题
方案1:修正打包参数
你说在Windows控制台运行exe会弹出新窗口,大概率是打包时用了-w/--windowed参数——这个参数会让程序脱离控制台运行,哪怕加了input()也没法捕获输入。
- 重新打包时去掉该参数,用命令:
这样生成的exe会绑定控制台,运行时不会自动关闭,能正常接收输入。pyinstaller your_script.py
方案2:排查隐藏异常
虽然能看到所有打印内容,但可能程序在走到你的循环代码前就抛出了未捕获的异常,只是窗口关太快没察觉。
- 在主代码外层加异常捕获,把错误写入日志文件:
重新打包运行后,若有异常会生成import traceback try: # 你的原有业务代码 print("程序正常输出内容") # ... # 你的循环代码 while(True): out = input("You want to exit now? y/n ") if out == 'y': print("Goodbye!") break except Exception as e: with open("error_log.txt", "w", encoding="utf-8") as f: f.write(traceback.format_exc()) input("程序出错,已生成错误日志,按回车关闭")error_log.txt,能直接看到问题原因。
方案3:修复控制台编码问题
Windows控制台默认编码可能和程序输出编码不匹配,导致输入输出异常,看似执行完实际是编码错误中断了流程。
- 在程序开头加编码设置:
重新打包后测试输入功能。import sys import os if sys.platform == "win32": os.system("chcp 65001")
方案4:强制窗口停留(适合无控制台打包场景)
如果必须用-w参数打包(无独立控制台窗口),可以在程序末尾加系统命令强制停留:
import os os.system("pause")
不过更推荐方案1的打包方式,能保证正常交互逻辑。
内容的提问来源于stack exchange,提问作者Ann Luneva
相关产品推荐
相关产品推荐

