gpt4 book ai didi

c++ - 如何从 C python api 中的 PyCodeObject 获取源代码?

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:53 26 4
gpt4 key购买 nike

您好,我正在使用 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

使用它

关于c++ - 如何从 C python api 中的 PyCodeObject 获取源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51630966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com