zoukankan      html  css  js  c++  java
  • Flask + Pyinstaller 打包后运行报错 SystemError

    起因: 公司有个将Flask打包为exe且不显示终端窗口的需求.

    过程: 先用Pyinstaller尝试打包, 不带 -w 参数, 打包、运行一切正常;

    问题: 尝试添加 -w 参数后(隐藏终端窗口), 发现运行时报错SystemError.

    分析: 跟踪异常堆栈发现, Flask的日志输出是通过写入标准输出实现的. 当终端窗口未被创建时, Flask会由于无法取得预期的标准输出实例(期望为: _io.TextIOWrapper)导致无法调用write方法的从而抛出SystemError 

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

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

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

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

  • 相关阅读:
    Longest Common Substring
    未完成 Anagrams
    strStr
    vim的学习笔记
    Compare Strings
    Two Strings Are Anagrams
    KMP算法
    [ 力扣活动0314 ] 300. 最长上升子序列
    [ 力扣活动0317 ] 1160. 拼写单词
    [ 力扣活动0313 ] 169. 多数元素
  • 原文地址:https://www.cnblogs.com/HoD7/p/15593620.html
Copyright © 2011-2022 走看看