python中flask打包exe隐藏窗口触发异常

问题经过:

程序也写好了。也测试好了。

直接用pyinstaller打包添加 -w 隐藏窗口参数。

运行之后发现程序马上就结束了。因为exe可以被删除。而不是占用状态。

然后考虑说不隐藏窗口试试吧。结果不隐藏窗口一切正常。很奇葩的BUG啊

后来在隐藏窗口下导出异常错误内容 : 'NoneType' object has no attribute 'write'

解决方法:

其实打包之前就有所怀疑,flask一直在输出内容。

当这个命令行窗口不见了,他怎么输出呢。

再加上异常输出的内容是write写出。当然肯定不是写出日志文件的时候的问题。

因为日志文件写出了说明他没问题。不然就不会看到异常的这个内容。

最后经过程序员必备的“关键词索引技术”,成功的找到了相关答案。

解决: 在Flask初始化前显式的将标准输出重定向

import sys
import os

sys.stdout = open(os.devnull, "w")  # 不保留任何标准输出

# ------- 以下为原始代码 -------
app = Flask(__name__)  # ...

最后: 请注意, 该做法会导致所有依赖于标准输出的函数(方法)失效, 这其中有可能包括日志. 因此最好在输出不多的情况下写到一个文件里或者输出多时定义一个类或方法封装一下.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只特立独行的猫;

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值