Как получить исходный код из PyCodeObject на языке Python API?

Привет, я использую C Python API.
Я хочу извлечь исходный код объекта функции.
Я хочу чистый код Python (например, def func: …), но если это сложно, то я хочу
получить как минимум байтовые коды.

Вот мой код C ++, который я получаю PyCodeObject от PyFunctionObject.

//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».
Но я хочу сделать это с помощью Python API.

P.S
Я предполагаю, что член co_code PyCodeObject является байтовым массивом.
Я использовал представление визуальной отладочной памяти Visual Studio и увидел примыкающий байт памяти члена co_code, но он выглядит как массив байтовых кодов (возможно).

1

Решение

Во-первых, PyCodeObject->co_code это сгенерированный байт-код, а не чистый исходный код Python.

В Python мы могли бы использовать inspect.getsource чтобы получить чистый исходный код Python. И в C, вы также можете использовать его через PyObject_CallMethod

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector