Я использую Python, встроенный в приложение C ++. Программа состоит из графического интерфейса Qt и рабочего QThread, где происходят вычисления. Пользователь может выбрать запуск скрипта Python из файла или запуск приглашения Python. Оба работают в QThread. Программа завершается, когда скрипт python завершен или когда мы покидаем приглашение python. Однако я хочу обработать случай, когда пользователь запрашивает выход из графического интерфейса.
Если я запускаю скрипт Python, я могу добиться этого путем вызова PyErr_SetInterrupt
(увидеть Остановка встроенного Python). Интерпретатор Python останавливается, и мы можем выйти нормально. Тем не менее, я не нашел хорошего способа заставить Python завершить работу.
Я пытался кормить персонажей stdin
(с ungetc
в надежде, что приглашение Python их получит, но безуспешно. Я делаю это от перегруженного PyOS_InputHook
который я использую для перехвата событий Qt во время работы приглашения Python.
Любые идеи, как правильно заставить приглашение Python для выхода?
Разве вы не можете настроить приемник слотов на своем QThread
подкласс, который будет вызывать PyErr_SetInterrupt
в правильном контексте для вас?
Вы можете добиться более четкого разделения проблем, если вместо использования QThreads вы запустите встроенный интерпретатор Python в отдельном процессе, который затем вы сможете kill
это так, как вы считаете нужным, или, по крайней мере, можете, если вы работаете на платформе POSIX-y; Я так понимаю, этот тип операции сильно отличается, например, от Окна.
Других решений пока нет …