使用CX_FREEZE打包Python脚本后无法调用CMD及输出内容的问题
解决cx_Freeze打包32位Python3.6脚本无输出问题
我之前踩过cx_Freeze打包32位Python 3.6脚本的输出坑,试了好几种方法才解决,给你几个亲测有效的方案:
强制绑定控制台输出
cx_Freeze在32位Python环境下偶尔会误判程序类型为GUI,自动隐藏控制台。你需要在setup.py里明确指定启用控制台模式:from cx_Freeze import setup, Executable # 替换成你的主脚本文件名 main_script = "your_script.py" target_exe = Executable( script=main_script, base=None, # 关键参数:禁用GUI模式,强制启用控制台 target_name="your_program.exe" ) setup( name="YourApp", version="1.0", executables=[target_exe] )重新打包后,运行生成的exe会自动弹出控制台,
print()或者命令输出都会正常显示在这里。手动唤起CMD承载输出
如果上面的配置还是不生效,可以在脚本里主动启动CMD窗口来承载输出,替换你原来的call(cmd, shell=True)写法:import subprocess a = "需要输出的内容" # 使用Popen启动CMD,/k参数会让CMD执行后保持打开(方便查看输出) subprocess.Popen(["cmd.exe", "/k", f"echo {a}"], shell=False)要是想把整个程序的输出都定向到新CMD窗口,可以在脚本开头加一段判断:
import sys import subprocess # 检查当前是否有控制台输出环境 if not sys.stdout.isatty(): # 没有的话,启动CMD并重新运行当前脚本 subprocess.Popen(["cmd.exe", "/k", sys.executable] + sys.argv) sys.exit() # 下面是你的原有业务代码 print("终于能看到输出啦!")适配兼容的cx_Freeze版本
Python3.6 32位对cx_Freeze的版本要求比较严格,新版本可能存在兼容性问题。建议安装亲测有效的旧版本:pip uninstall cx_Freeze -y pip install cx_Freeze==5.1.1卸载现有版本后重新安装指定版本,再打包,很多无输出问题都是版本不匹配导致的。
内容的提问来源于stack exchange,提问作者Sande
相关产品推荐
相关产品推荐

