从c++中停止嵌入Python提示符

Stop embedded Python prompt from C++

本文关键字:Python 提示符 c++      更新时间:2023-10-16

我正在运行嵌入在c++应用程序中的Python。该程序由一个Qt GUI和一个工作QThread组成,其中进行计算。用户可以选择从文件中运行Python脚本或启动Python提示符。两者都在QThread中运行。当python脚本完成或退出python提示符时,程序退出。但是,我想处理用户请求退出GUI的情况。

如果运行Python脚本,我可以通过调用PyErr_SetInterrupt来实现这一点(参见停止嵌入式Python)。Python解释器停止,我们可以正常退出。但是,我还没有找到一个好方法来强制Python提示符退出。

我已经尝试向stdin(与ungetc)提供字符,希望Python提示接收它们,但没有成功。我从一个重载的PyOS_InputHook中做到这一点,当Python提示符正在运行时,我用它来捕获Qt事件。

你知道如何正确地强制Python提示符退出吗?

您能否在QThread子类上设置一个插槽接收器,以便在适当的上下文中为您调用PyErr_SetInterrupt ?

如果不是使用QThreads,而是在一个单独的进程中运行你的嵌入式Python解释器,你可以在你认为合适的情况下kill它,或者至少你可以在POSIX-y平台上实现更清晰的关注点分离;