2016-09-13 8 views
1

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

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

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

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

ответ

1

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

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

+0

Проблема в том, что 'PyErr_SetInterrput' не завершает запрос Python. Разделение процесса python на другой поток может быть решением, но оно также добавляет сложности, которых я пытался избежать. Возможно, это и есть путь. – Jose