嗨,我正在使用c python api。 我想提取功能对象的源代码。 我想要纯python代码(例如def func:...),但是如果很难,我想 至少获取py字节码。
这是我的C ++代码,是我从PyFunctionObject获取PyCodeObject的。
//pObject is PyFunctionObject which is python standard lib's function.
PyFunctionObject* pFunctionObject = (PyFunctionObject*)pObject;
PyCodeObject* codeObject = (PyCodeObject*)pFunctionObject->func_code;
PyObject* strObject = codeObject->co_code; //get code from code object
char * sourceCode = PyString_AsString(strObject); //convert to string
但是sourceCode变量(char *)始终仅显示1个字节。
我应该怎么得到这个? 在python代码方面有很多方法可以做到这一点,就像只使用'dis'或'inspect'模块一样。 但是我想通过c python api做到这一点。
P.S 我猜想PyCodeObject的co_code成员是一个字节数组。 我使用了Visual Studio调试内存视图,并看到了co_code成员的相邻内存字节,但它看起来像是字节码数组(也许)。
答案 0 :(得分:0)
首先,PyCodeObject->co_code
是生成的字节码,而不是纯Python源代码。
在Python中,我们可以使用inspect.getsource
来获取纯Python源代码。在C语言中,您也可以通过PyObject_CallMethod