这(我认为是一个错误)困扰了我很长一段时间。在对该主题进行了大量搜索之后,我找到了一个不错的解决方案,但我对此并不满意。
错误如下;
#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() 对另一个脚本很重要,所以我不想碰它们。