2

这(我认为是一个错误)困扰了我很长一段时间。在对该主题进行了大量搜索之后,我找到了一个不错的解决方案,但我对此并不满意。

错误如下;

#starts main.pyw
Import foo2.py
# foo2 contains print()
# After a few seconds(sometimes minutes) "'pythonw.exe' has stopped working."

经过一番研究,我发现这是由于 python2 试图强制 sys.stdout 甚至知道上下文无处可去。这已在 python3 中修复。

该程序 (main.pyw) 是我的游戏的 Tkinter 启动器,它从 foo.py 捕获控制台输出。foo2.py 被 foo.py 使用。main 的控制台从未使用过,所以显而易见的选择是隐藏它(我个人有一台小型笔记本电脑,所以控制台是太空猪/眼痛)

这是我的临时解决方案:

# change 'main.pyw' to 'main.py
import ctypes
def HideConsole():
    kernel32 = ctypes.Win.DLL('kernel32')
    user32 = ctypes.Win.DLL('user32')
    SW_HIDE = 0
    hwnd = kernel32.GetConsoleWindow()
    if hwnd:
        user32.ShowWindow(hwnd, SW_HIDE)
HideConsole()

这工作正常。Python.exe 启动,控制台打开,控制台关闭,然后 Tkinter 启动,崩溃停止。但我感觉这不是正确的解决方案,你的想法是什么?有没有更好的方法来隐藏控制台而不使用 pythonw?

编辑:我已经尝试重定向 sys.stdout,而且 Print() 对另一个脚本很重要,所以我不想碰它们。

4

0 回答 0