2016-09-13 14 views
1

저는 C++ 응용 프로그램에 내장 된 Python을 실행 중입니다. 이 프로그램은 계산이 이루어지는 Qt GUI와 작업 QThread로 구성됩니다. 사용자는 파일에서 파이썬 스크립트를 실행하거나 파이썬 프롬프트를 시작할 수 있습니다. 둘 다 QThread에서 실행됩니다. 파이썬 스크립트가 끝나거나 파이썬 프롬프트를 종료 할 때 프로그램이 종료됩니다. 그러나 사용자가 GUI에서 종료하도록 요청한 경우에는 처리하려고합니다.C++에서 임베디드 파이썬 프롬프트를 중지하십시오.

파이썬 스크립트를 실행하는 경우 PyErr_SetInterrupt (Stopping embedded Python 참조) 호출을 통해이를 수행 할 수 있습니다. 파이썬 인터프리터가 멈추고 정상적으로 종료 할 수 있습니다. 그러나 파이썬 프롬프트를 강제 종료하는 좋은 방법을 찾지 못했습니다.

나는 stdin (ungetc) 문자를 파이썬 프롬프트가 수신하지만 성공하지 못하도록하기 위해 문자를 입력 해 보았습니다. 파이썬 프롬프트가 실행되는 동안 Qt 이벤트를 잡는 데 오버로드 된 PyOS_InputHook에서이 작업을 수행합니다.

어떤 아이디어로든 파이썬 프롬프트를 강제 종료하는 방법은 무엇입니까?

답변

1

QThread 하위 클래스에 PyErr_SetInterrupt을 적절한 컨텍스트로 호출하는 슬롯 수신기를 설정할 수 있습니까?

QThreads를 사용하는 대신 별도의 프로세스에서 임베디드 Python 인터프리터를 실행하면보다 명확한 분리 문제를 해결할 수 있습니다. 그러면 적합하다고 생각되는 경우 kill 수 있으며, POSIX-y 플랫폼에서 다시 작동합니다. 나는이 유형의 작업을 다른 방식으로 진행합니다. Windows.

+0

'PyErr_SetInterrput'은 파이썬 프롬프트를 종료하지 않습니다. 파이썬 프로세스를 다른 스레드로 분리하는 것은 해결책 일 수 있지만 피하려고 시도했던 복잡성이 더해졌습니다. 그것은가는 방법일지도 모른다. – Jose