您好,我正在使用 c python api。我想提取函数对象的源代码。我想要纯 python 代码(比如 def func: ... )但是如果很难的话,我想至少得到py字节码。
这是我从 PyFunctionObject 获取 PyCodeObject 的 C++ 代码。
//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 来做到这一点。
附言我猜 PyCodeObject 的 co_code 成员是一个字节数组。我使用 visual studio 调试内存 View 并看到 co_code 成员的相邻内存字节,但它看起来像一个字节码数组(也许只是)。
首先,PyCodeObject->co_code
是生成的字节码,不是纯Python源码。
在 Python 中,我们可以使用 inspect.getsource
来获取纯 Python 源代码。在 C 中,您还可以通过 PyObject_CallMethod
使用它
我是一名优秀的程序员,十分优秀!