sys.stdout的最佳解决方案导致' pythonw.exe'崩溃

时间:2017-03-06 16:12:52

标签: python-2.7 ctypes crash pythonw

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

错误如下;

#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的控制台输出。 foo.py使用foo2.py.从不使用主控制台,所以显而易见的选择是隐藏它(而且我个人有一台小型笔记本电脑,所以控制台是一个空间生猪/眼睛疼痛)

这是我的生产班制解决方案:

# 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()对另一个脚本也很重要,所以我宁愿不要触摸它们。

0 个答案:

没有答案