Остановите встроенную подсказку Python из переполнения стека

Я использую Python, встроенный в приложение C ++. Программа состоит из графического интерфейса Qt и рабочего QThread, где происходят вычисления. Пользователь может выбрать запуск скрипта Python из файла или запуск приглашения Python. Оба работают в QThread. Программа завершается, когда скрипт python завершен или когда мы покидаем приглашение python. Однако я хочу обработать случай, когда пользователь запрашивает выход из графического интерфейса.

Если я запускаю скрипт Python, я могу добиться этого путем вызова PyErr_SetInterrupt(увидеть Остановка встроенного Python). Интерпретатор Python останавливается, и мы можем выйти нормально. Тем не менее, я не нашел хорошего способа заставить Python завершить работу.

Я пытался кормить персонажей stdinungetcв надежде, что приглашение Python их получит, но безуспешно. Я делаю это от перегруженного PyOS_InputHook который я использую для перехвата событий Qt во время работы приглашения Python.

Любые идеи, как правильно заставить приглашение Python для выхода?

1

Решение

Разве вы не можете настроить приемник слотов на своем QThread подкласс, который будет вызывать PyErr_SetInterrupt в правильном контексте для вас?

Вы можете добиться более четкого разделения проблем, если вместо использования QThreads вы запустите встроенный интерпретатор Python в отдельном процессе, который затем вы сможете kill это так, как вы считаете нужным, или, по крайней мере, можете, если вы работаете на платформе POSIX-y; Я так понимаю, этот тип операции сильно отличается, например, от Окна.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]