【发布时间】:2011-01-04 17:11:05
【问题描述】:
我想在我的 C/C++ 应用程序中创建一个嵌入式 Python 解释器。理想情况下,该解释器的行为与真正的 Python 解释器完全一样,但在处理每一行输入后会产生。标准的 Python 模块 code 从外部看起来和我想要的完全一样,只是它是用 Python 编写的。例如:
>>> import code
>>> code.interact()
Python 2.7.1 (r271:86832, Jan 3 2011, 15:34:27)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
code 的核心是接受可能不完整的用户输入并显示语法错误(情况 1)、等待更多输入(情况 2)或执行用户输入(情况 3)的函数。
try:
code = self.compile(source, filename, symbol)
except (OverflowError, SyntaxError, ValueError):
# Case 1
self.showsyntaxerror(filename)
return False
if code is None:
# Case 2
return True
# Case 3
self.runcode(code)
return False
Python 源代码树Demo/embed/demo.c 中的示例是外壳,但不是我想要的,因为该示例仅处理完整的语句。我在这里包含了一部分以供参考:
/* Example of embedding Python in another program */
#include "Python.h"
main(int argc, char **argv)
{
/* Initialize the Python interpreter. Required. */
Py_Initialize();
[snip]
/* Execute some Python statements (in module __main__) */
PyRun_SimpleString("import sys\n");
[snip]
/* Exit, cleaning up the interpreter */
Py_Exit(0);
}
我正在寻找的是处理不完整块、堆栈跟踪等的 C 代码。也就是说,真正的 Python 解释器的所有行为。提前致谢。
【问题讨论】: