PyInstaller打包Python脚本为exe后CMD窗口闪退如何解决
问题原因
你在代码末尾添加的input等待语句仅在程序正常执行完全部逻辑时才会运行,当触发输入类型错误、数值超出范围调用sys.exit()时,程序会直接提前终止,无法执行到最后的等待语句,控制台窗口会随程序退出直接关闭。
解决方案
- 方案1:用
try-except结构包裹全局逻辑,捕获所有程序终止场景,统一触发等待逻辑
修改后的代码如下:
import sys import traceback def main(): x = int(input(" 请输入一个数字 :")) y = int(input(" 请输入一个数字 :")) if x>100 or y > 100 : sys.exit("错误:数值超出允许范围") z=x+y print(f"计算结果为:{z}") if __name__ == "__main__": try: main() except SystemExit as e: # 捕获sys.exit触发的主动退出,打印自定义错误信息 if str(e): print(e) except Exception: # 捕获所有运行时异常,打印完整错误回溯 traceback.print_exc() # 无论正常退出还是异常退出,都等待用户输入后再关闭窗口 input('按回车键退出')
该方案适配所有场景,打包成exe后不管是正常运行、主动退出还是触发运行时错误,都会停在控制台等待用户操作。
- 方案2:调试阶段通过手动打开的CMD运行exe
先打开CMD终端,使用cd命令切换到exe所在的文件夹,直接输入exe的完整文件名回车运行。此时控制台是手动启动的,程序退出后窗口不会自动关闭,所有输出和异常回溯都会完整保留。
打包注意事项
使用PyInstaller打包时不要添加-w/--windowed参数,该参数是给GUI程序使用的,会禁用控制台窗口导致所有输出不可见;默认打包模式就是控制台模式,也可以主动添加-c/--console参数确认开启控制台功能。
内容的提问来源于stack exchange,提问作者G.ONE
相关产品推荐
相关产品推荐

