我正在尝试从嵌入式Python C API中模拟code.InteractiveInterpreter
。我正在使用PyEval_Evalcode
来评估用户输入。我试图在解释器中评估用户输入并将输出作为字符串返回(就像解释器一样)。但是,PyEval_Evalcode
返回包含在PyObject*
中的大量数据类型。有什么方法可以做我想做的事情吗?
约束:需要使用嵌入api来完成。无法使用PyRun_RunSimpleString()
并放置code.InteractiveInterpreter
。
答案 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终止字符串 }