python - 从 C++ 停止嵌入式 Python 提示

标签 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 提示符能接收到它们,但没有成功。我通过重载的 PyOS_InputHook 执行此操作,我用它在 Python 提示符运行时捕获 Qt 事件。

关于如何正确强制 Python 提示退出的任何想法?

最佳答案

你能不能在你的 QThread 子类上设置一个插槽接收器,它将在适当的上下文中为你调用 PyErr_SetInterrupt

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

关于python - 从 C++ 停止嵌入式 Python 提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39472584/

相关文章:

python - 为什么 hashlib 比 sha256 的其他代码更快?如何让我的代码接近 hashlib 性能?

javascript - 将数据结构从 Python 移植到 JS

Python3 - 标识符中的无效字符(公式内)

c++ - 如何将比较器与 is_transparent 类型一起使用?

c++ - 如何在 C++ 中实现传递函数的控制系统 block ?

c++ - 基于 C/C++ 插件的系统的良好模式?

python - 在 Python 中打开和查看 .npz 文件

通过 tp_getset 访问时 Python C 扩展出现段错误

python - 如何从 PyListObject 获取 `pop` 元素?

c - Python C API 段错误