从 C++ 停止嵌入式 Python 提示符

Posted

技术标签:

【中文标题】从 C++ 停止嵌入式 Python 提示符【英文标题】:Stop embedded Python prompt from C++ 【发布时间】:2016-09-13 14:31:23 【问题描述】:

我正在运行嵌入在 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 提示退出?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

问题是PyErr_SetInterrput没有终止Python提示。将 python 进程分离到不同的线程可能是一个解决方案,但它也增加了我试图避免的更多复杂性。这可能是要走的路。

以上是关于从 C++ 停止嵌入式 Python 提示符的主要内容,如果未能解决你的问题,请参考以下文章

我是win7系统,excel打开后提示我stdole32.tlb ,不能使用对象链接和嵌入 然后就停止工作。急求高手回答!

NMAKE:致命错误 U1077:“cl.exe”:返回代码“0x1”停止。在命令提示符下

如何从命令提示符创建 C++ 项目? [关闭]

windows7下 pycharm运行django 崩溃 提示 python已经停止工作

如何从 windows10 中的命令提示符生成 opencv 3.0 c++ 程序的 .exe?

你最好的调试提示是啥?