从CAPI评估Python代码并获取输出

时间:2011-10-22 16:35:05

标签: python python-c-api

我正在尝试从嵌入式Python C API中模拟code.InteractiveInterpreter。我正在使用PyEval_Evalcode来评估用户输入。我试图在解释器中评估用户输入并将输出作为字符串返回(就像解释器一样)。但是,PyEval_Evalcode返回包含在PyObject*中的大量数据类型。有什么方法可以做我想做的事情吗?

约束:需要使用嵌入api来完成。无法使用PyRun_RunSimpleString()并放置code.InteractiveInterpreter

2 个答案:

答案 0 :(得分:3)

PyEval_Evalcode()返回的对象可以使用PyObject_Repr()或PyObject_Str()转换为Python字符串。可以使用PyString_AsString()将生成的python字符串转换为常规C字符串。

答案 1 :(得分:0)

我有二进制字符串,因为空终止字符串而无法将其作为字符串返回。

如果(PyString_Check(p值))                 {                     const char * s = / * PyBytes_AsString * / PyString_AsString(PyObject_Repr(pValue)); //在ascii中返回十六进制表示                     int sz = PyString_Size(pValue); //大小有效                     const char * s = PyString_AsString(pValue); //仅返回null终止字符串                 }