我开发了一个可以在 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 似乎正在将标准输出重定向到其他地方。
是否可以让它在两种模式下工作?任何地方似乎都没有类似的记录。 :(
提前致谢。
Mridang
我发现了这一点this page:
无控制台版本的提示:如果
你尝试打印任何东西,你会
得到一个令人讨厌的错误窗口,因为
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()
这样,如果程序启动于
无控制台模式,它甚至可以工作
如果代码包含 print 语句。
如果在命令行模式下运行,
将照常打印出来。 (这是
基本上就是我在 webGobbler 中所做的,
也。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)