Программа pygame завершает работу без сообщения об ошибке при запуске с pythonw

Я пытаюсь запустить программу pygame, используя pythonw, чтобы избежать появления окна консоли. Это вызывает странную проблему, связанную с операторами печати.

В основном, программа просто выйдет через несколько секунд без сообщения об ошибке. Чем больше печати я делаю, тем быстрее это происходит. Если я запускаю его в режиме ожидания или в командной строке (или в Linux), программа работает нормально. Эта проблема возникает только при запуске с pythonw (щелчок правой кнопкой мыши, Open With, pythonw).

Я использую Python 2.7.11 на 32-битной Windows XP. выпуск pygame 1.9.1.

Есть ли обходной путь для этого? Почему программа просто завершается без ошибок?

import pygame
from pygame.locals import *

succeeded, failed = pygame.init()
display_surface = pygame.display.set_mode((320, 240))
clock = pygame.time.Clock()

terminate = False
while terminate is False:
    for event in pygame.event.get():
        if event.type == QUIT:
            terminate = True    
    area = display_surface.fill((0,100,0))
    pygame.display.flip()                 
    elapsed = clock.tick(20)              
    print str(elapsed)*20
pygame.quit()

1 ответ

Вам не нужно удалять операторы печати. Сохраните их для последующей отладки.;-)

Два шага для решения этой проблемы:

  • Во-первых, держите весь код в py файл - не меняйте его на pyw сейчас; Скажи это actualCode.py
  • Затем создайте новый файл runAs.pyw со следующими строками
# In runAs.pyw file, we will first send stdout to StringIO so that it is not printed

import sys  # access to stdout
import StringIO  # StringIO implements a file like class without the need of disc

sys.stdout = StringIO.StringIO()  # sends stdout to StringIO (not printed anymore)

import actualCode  # or whatever the name of your file is, see further details below

Обратите внимание, что при импорте фактического кода запускается файл, поэтому в actualCode.py Вы не должны заключать код, который выполняется, в то, что я называю is it main running file состояние. Например,

# In actualCode.py file
....
....
....
if __name__ == '__main__':  # Don't use this condition; it evaluates to false when imported
    ...  # These lines won't be executed when this file is imported,
    ...  # So, keep these lines outside
# Note: The file in your question, as it is, is fine
Другие вопросы по тегам