Python 如何使用cx\U冻结来冻结双模(GUI和控制台)应用程序?

Python 如何使用cx\U冻结来冻结双模(GUI和控制台)应用程序?,python,wxpython,cx-freeze,Python,Wxpython,Cx Freeze,我开发了一个Python应用程序,它可以在GUI模式和控制台模式下运行。如果指定了任何参数,它将在控制台模式下运行,否则将在GUI模式下运行 我已经设法用cx\u freeze冻结了这个。我在隐藏wxPython弹出的黑色控制台窗口时遇到了一些问题,因此我修改了setup.py脚本如下: import sys from cx_Freeze import setup, Executable base = None if sys.platform == "win32": base = "

我开发了一个Python应用程序,它可以在GUI模式和控制台模式下运行。如果指定了任何参数,它将在控制台模式下运行,否则将在GUI模式下运行

我已经设法用cx\u 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正在将标准输出重定向到其他地方

是否有可能使其在两种模式下都工作?任何地方似乎都没有类似的记录:(

提前谢谢


Mridang

Raymond Chen曾写到:。简言之,直接在Windows下是不可能的,但有一些解决方法

我建议提供两个可执行文件—cli和gui—一个。

我在第页找到了这一点:

无控制台版本提示:如果 如果你想打印任何东西,你会的 得到一个讨厌的错误窗口,因为 标准输出和标准输出不存在(和 cx_freeze Win32gui.exe存根将 显示错误窗口)。这是一个错误 当你想让你的程序正常运行时,你会感到痛苦 能够在GUI模式下运行,并且 命令行模式。安全禁用 控制台输出,在 课程开始:

这样,如果程序以 无控制台模式,甚至可以正常工作 如果代码包含打印语句。 如果在命令行模式下运行,则 将像往常一样打印出来。(这是 基本上就像我在webGobbler做的一样, 我也是。)


我找到了一个解决办法,正如那个家伙在他的帖子中提到的。看看下面我的答案。我把这个片段放在了我的代码中,但我仍然得到了一个错误。这可能与在我的代码中使用colorama有关,我的代码是一个输出彩色文本的库。你也知道如何修复这个问题吗?我添加了这个片段以澄清错误。希望你能帮助我。
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()