【问题标题】:Pyinstaller : How to hide fatal error GUI in pythonPyinstaller:如何在 python 中隐藏致命错误 GUI
【发布时间】:2016-02-03 15:27:10
【问题描述】:

使用 pyinstaller 构建我的 exe 后,有时发生异常时,我会在 gui 中看到致命错误:fatalerror image

我只是想隐藏这个。

ps :我使用带有 --windowed 选项的 Pyinstaller

非常感谢!

【问题讨论】:

  • 你的意思是使用pyinstaller创建的.EXE文件在执行时会产生错误吗?或者您的意思是在使用 pyinstaller 构建 .EXE 的过程中,您遇到了上述错误?
  • 在运行时。的.EXE。当运行时发生异常时,会显示此窗口...但我不希望它出现。
  • 那么我认为你必须编辑python代码。代码中一定有配置这个异常的地方...找到并修改异常。
  • 你的意思是捕获这个异常吗?我知道我可以做到,但我想知道是否也可以在使用 pyinstaller 后隐藏错误窗口
  • 我认为构建可执行文件后无法隐藏此窗口。您必须修改代码,然后再次构建可执行文件。

标签: python user-interface hide pyinstaller


【解决方案1】:

当您的应用程序有未捕获的异常时,PyInstaller 的启动/关闭代码会显示此对话框。抑制它的最佳方法是在 Python 代码中捕获异常并正常退出应用程序(通过调用 sys.exit() 或引发 SystemExit)。这可以通过 main() 周围的顶级 try...catch 或启动事件循环的调用来完成。

我还建议创建一个 GUI 对话框,在文本框中显示致命异常的回溯,以便用户更轻松地向您报告错误。

【讨论】:

    【解决方案2】:

    我在涉及 subprocess.Popen 的根本原因方面遇到了类似问题,如果您不使用此功能(或类似功能),那么此答案不太可能有帮助。

    我在尝试使用 pyinstaller 构建我的 .exe 时遇到了类似的问题。我在 pyinstaller 中使用了 --noconsole 标志和 --onefile 标志,并得到“致命错误!”每当我尝试执行生成的 .exe 文件时,消息“返回 -1”。我的 .exe 将仅使用 --onefile 标志构建工作,但使用 --noconsole 标志的任何组合都会返回错误,让我相信这是我的问题的根源。

    经过一番挖掘,我找到了这个答案:

    Python subprocess.call() fails when using pythonw.exe

    这似乎表明问题是在使用带有 pythonw.exe 而不是 python.exe 的 subprocess.Popen 时使用管道。在我看来,带有 --noconsole 标志的 pyinstaller 在构建 .exe 时会使用 pythonw.exe 而不是 python.exe 让我相信这可能适用于我的问题,这似乎是合乎逻辑的。

    为了测试这一点,我通过代码重构了将 Subprocess.Popen 调用的结果输出到文件,然后读入并删除了该文件。这解决了我的“致命错误!”问题,其他一切正常。

    原文:

    process = subprocess.Popen('cmd /c whoami', stdout=subprocess.PIPE)
    user = process.communicate()[0].decode('ascii').strip()
    

    重构:

    pro = subprocess.Popen('cmd /c whoami > "{0}"'.format(file_name))
    pro.wait()
    with open(file_name, 'rt') as file:
        user = file.read().strip()
    os.remove(file_name)
    

    【讨论】:

      猜你喜欢
      • 2014-05-10
      • 2015-08-23
      • 2021-01-26
      • 1970-01-01
      • 2016-05-06
      • 2019-11-17
      • 1970-01-01
      • 2016-09-27
      • 2018-08-17
      相关资源
      最近更新 更多