Python-Pygame os.system как закрыть экран ОСНОВНОЙ файл-Pygame

Я делаю игру с Pygame, в которой есть несколько кнопок, при нажатии специальной кнопки открывается другой файл .exe. Я делаю это таким образом;

os.system("filename.exe")

Но экран Pygame остается в фоновом режиме, я хочу закрыть этот экран, когда пользователь нажимает эту кнопку и открывает этот файл .exe. Я пробовал это;

#codes
...
...
if action == "play":
    os.system("filename.exe")
    pygame.quit()
    quit()

Теоретически это должно работать, открыть файл .exe после того, как выйти из Pygame. Но это не работает, файл .exe открыт успешно, но экран Pygame по-прежнему остается в фоновом режиме, и если я прикоснусь к нему, выдается ошибка Pygame перестает работать.

Как я могу это исправить? Когда открывается этот специальный файл .exe, закрыть экран Pygame?


person Community    schedule 03.01.2015    source источник


Ответы (1)


os.system дождитесь завершения программы; следующая строка pygame.quit не будет выполняться до завершения процесса. Вместо os.system вы можете использовать subprocess.Popen, который не дожидается завершение программы (или любой другой функционал, не дожидающийся завершения процесса):

import subprocess

....


if action == "play":
    subprocess.Popen(["filename.exe"])
    pygame.quit()
    quit()
person falsetru    schedule 03.01.2015
comment
На самом деле это работает, если я запускаю игру с IDLE (f5), но теперь появляется другая проблема. Когда я пытаюсь запустить игру двойным щелчком или используя терминал (cmd), он не открывает этот EXE-файл. Просто закройте экран Pygame. Почему ? - person ; 03.01.2015
comment
@grrr, в терминале вы видите сообщение об ошибке? Возможно, в текущем рабочем каталоге нет файла. Попробуйте указать полный путь к исполняемому файлу. - person falsetru; 03.01.2015
comment
К сожалению, нет, я уверен, что они находятся в одном каталоге. Также я открываю терминал в этом каталоге. Нет сообщения об ошибке, ничего плохого, кроме того, что он не открывает файл .exe. Я пытаюсь понять почему. - person ; 03.01.2015
comment
@grrr, Текущий рабочий каталог! = каталог, содержащий скрипт python. - person falsetru; 03.01.2015
comment
@grrr, coudl вы пробуете с shell=True? subprocess.Popen(["filename.exe"], shell=True) - person falsetru; 03.01.2015
comment
О мой бог, моя вина хахахахах. Я использую win32gui.ShowWindow (win, 0), который скрывает терминал, а мой файл .exe работает на терминале .. Вот почему кажется, что он не открывается. Спасибо за ответ и помощь. - person ; 03.01.2015
comment
@grrr, пожалуйста. Рад помочь вам. Удачного взлома. - person falsetru; 03.01.2015