Программа 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