如何使用 cx_Freeze 冻结双模式(GUI 和控制台)应用程序?
Posted
技术标签:
【中文标题】如何使用 cx_Freeze 冻结双模式(GUI 和控制台)应用程序?【英文标题】:How can I freeze a dual-mode (GUI and console) application using cx_Freeze? 【发布时间】:2010-05-21 15:02:47 【问题描述】:我开发了一个可以在 GUI 模式和控制台模式下运行的 Python 应用程序。如果指定了任何参数,它将以控制台模式运行,否则以 GUI 模式运行。
我已经设法使用 cx_Freeze 冻结了它。我在隐藏会随 wxPython 弹出的黑色控制台窗口时遇到了一些问题,因此我修改了我的 setup.py
脚本,如下所示:
import sys
from cx_Freeze import setup, Executable
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup(
name = "simple_PyQt4",
version = "0.1",
description = "Sample cx_Freeze PyQt4 script",
executables = [Executable("PyQt4app.py", base = base)])
这工作正常,但现在当我尝试打开控制台并从那里运行可执行文件时,它不会输出任何内容。我没有收到任何错误或消息,因此 cx_Feeze 似乎正在将标准输出重定向到其他地方。
是否有可能让它在两种模式下都工作?任何地方似乎都没有类似的记录。 :(
提前致谢。
马里当
【问题讨论】:
【参考方案1】:我在this 页面上发现了这一点:
无控制台版本的提示:如果 你尝试打印任何东西,你会 得到一个讨厌的错误窗口,因为 stdout 和 stderr 不存在(并且 cx_freeze Win32gui.exe 存根将 显示错误窗口)。这是一个 当你想让你的程序成为痛苦时 能够在 GUI 模式下运行,并且 命令行模式。安全禁用 控制台输出,在 程序开始:
try:
sys.stdout.write("\n")
sys.stdout.flush()
except IOError:
class dummyStream:
''' dummyStream behaves like a stream but does nothing. '''
def __init__(self): pass
def write(self,data): pass
def read(self,data): pass
def flush(self): pass
def close(self): pass
# and now redirect all default streams to this dummyStream:
sys.stdout = dummyStream()
sys.stderr = dummyStream()
sys.stdin = dummyStream()
sys.__stdout__ = dummyStream()
sys.__stderr__ = dummyStream()
sys.__stdin__ = dummyStream()
这样,如果程序在 无控制台模式,它甚至可以工作 如果代码包含打印语句。 如果在命令行模式下运行,它 会像往常一样打印出来。 (这是 基本上我在 webGobbler 中所做的, 也是。)
【讨论】:
我已将此 sn-p 放入我的代码中,但仍然出现错误。这可能与在我的代码中使用 colorama 有关,这是一个输出彩色文本的库。你也知道如何解决这个问题吗?我添加了a screenshot 来澄清错误。希望你能帮助我。【参考方案2】:Raymond Chen 曾写过这篇文章:http://blogs.msdn.com/b/oldnewthing/archive/2009/01/01/9259142.aspx。简而言之,直接在 Windows 下是不可能的,但有一些变通方法。
我建议提供两个可执行文件 - cli 和 gui 一个。
【讨论】:
我找到了他帖子中提到的那个人的解决方法。看看我下面的答案。以上是关于如何使用 cx_Freeze 冻结双模式(GUI 和控制台)应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
使用 cx_Freeze 冻结 Python 3.7 脚本时如何修复错误
使用 cx_Freeze 冻结成可执行文件后如何知道当前文件路径?
cx_Freeze 没有找到一些 TensorFlow 导入
如何在使用 cx_Freeze 6.0b1 冻结的 Linux 上修复 python 3.7.3 脚本上的 numpy 依赖项路径?