使用C++ Python API逐行执行Python脚本
我的目标是执行一个Python脚本,这个脚本可以逐行处理我C++程序中的值,并在Python脚本的每条语句之间把控制权返回给我的C++程序。目前,我尝试逐行给Python解释器输入我的脚本,但它需要一个上下文,而我不知道该怎么构建这个上下文。有没有人能推荐一些好的教程?(文档对此的说明不是很好)。
我选择了一个最接近我问题的答案,但我觉得这可能对某些应用来说控制不够。如果有更适合这些应用的答案,可能需要在Python API中进行更底层的调用。如果你有能提供更多控制执行的答案,请分享一下。
我在这个问题之后又问了另一个问题,因为我遇到了不同但非常相关的问题。链接:Python C API - 停止执行(然后再继续)
3 个回答
我告诉你,最好的办法就是把你的Python脚本转换成C++应用程序。这样你就能得到可以嵌入到你源代码中的有效代码。
如果你的C应用程序不太大,或许你更喜欢为Python制作一个C扩展,把Python代码变成主要应用程序。
无论哪种方式,我建议你使用Cython来实现。
如果你想了解如何做,可以参考这个问题:将Python程序转换为C/C++代码?
我不太确定我是否完全理解你的目标,但大约8个月前,我也想做类似的事情。我想通过Python脚本来控制我的C++应用程序。当时我使用的是win32、Qt和gcc。后来我发现,现在的gdb(gcc的调试工具)可以通过Python来编写脚本。我花了很多时间阅读相关资料,花了几天时间来实现,但效果很好。我不需要在我的C++源代码中添加任何额外的代码!
我觉得一次给一个脚本输入一行代码会很困难。你可以看看 sys.settrace()
这个方法,它可以设置一个函数,在每执行一行代码的时候就会被调用。你也可以在C语言的接口中使用 PyEval_SetTrace
,不过用法会稍微不同。