从C ++

时间:2016-09-13 14:31:23

标签: python c++ python-c-api embedded-language

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

如果运行Python脚本,我可以通过调用PyErr_SetInterrupt来实现此目的(请参阅Stopping embedded Python)。 Python解释器停止,我们可以正常退出。但是,我还没有找到一种强制Python提示退出的好方法。

我已尝试将字符提供给stdin(带ungetc),希望Python提示能够接收它们但却没有成功。我是通过在Python提示符运行时用来捕获Qt事件的重载PyOS_InputHook来完成的。

如何正确强制Python提示退出?

1 个答案:

答案 0 :(得分:1)

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

如果您不是使用QThreads,而是在一个单独的过程中运行嵌入式Python解释器,那么您可以实现更清晰的关注点分离 - 然后您可以根据需要kill将其解析,或者至少可以如果你在POSIX-y平台上;我认为这种类型的操作在例如视窗。