Является ли CFFI Python адекватным инструментом для анализа определений C из файла заголовка?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Является ли CFFI Python адекватным инструментом для анализа определений C из файла заголовка?

Сообщение Anonymous »

Из Python я хочу получить подробную информацию о структурах/массивах/перечислениях, определенных в заголовках C: список определенных типов, список и типы членов структуры, имена и значения, определенные в перечислениях, размер массивов, и т. д.
Я не планирую связывать библиотеку C с Python, но я хотел использовать проверенный в боевых условиях инструмент для «анализа» определений C, поэтому я выбрал CFFI и попробовал следующее. :
Начните с фиктивного файла test.h

Код: Выделить всё

typedef struct {

int a;
int b[3];
float c;

} other_struct_T;

typedef struct {

bool i;
bool j;
other_struct_T k;

}  main_struct_T;
предварительно обработайте его один раз, чтобы быть уверенным в разрешении #includes, #defines и т. д.

Код: Выделить всё

gcc -E -P -xc test.h -o test.preprocessed.h
Затем загрузите его с помощью CFFI, вот так

Код: Выделить всё

from pathlib import Path
from cffi import FFI

u = FFI()
txt = Path("test.preprocessed.h").read_text()
u.cdef(txt)
k = u.typeof("main_struct_T")
print(k)
print(k.elements)
который печатает первым.
Но не удается на втором (и k, похоже, не содержит ни .length, ни .item, ни .relements, как и следовало ожидать от экземпляра ctype, как упоминалось здесь)

Код: Выделить всё

Traceback (most recent call last):
File "./parse_header.py", line 14, in 
print(k.elements)
^^^^^^^^^^^
AttributeError: elements
Чего мне не хватает? Как бы вы сделали это по-другому?

Подробнее здесь: https://stackoverflow.com/questions/791 ... eader-file
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»