Как получить / получить структуру C из Python - PullRequest
2 голосов
/ 21 декабря 2011

У меня есть отдельный модуль Python, используемый для анализа некоторых необработанных данных. Модуль работает отлично.

Теперь мне нужен вывод, сгенерированный модулем Python в C-источнике, который будет выполнять дальнейшую обработку при выводе.

Вот примерное представление о потоке:

  1. C источник будет вызывать модуль Python.
  2. Модуль Python заполняет результаты, сгенерированные в структуру C, и затем каким-то образом передать его источнику C.

Так каков наилучший способ получить результаты из модуля Python в исходном коде C?

Должен ли я использовать что-то вроде следующего, чтобы заполнить результаты?

from ctypes import *
class result(Structure):       
    _fields_ = [("status", c_int), ...]

1 Ответ

3 голосов
/ 21 декабря 2011

Я не думаю, что вы захотите использовать модуль ctypes - этот модуль предназначен для доступа к DLL и общим объектам из кода Python, а не наоборот.

Вы не указываете, как программа C будет вызывать модуль Python. Будет ли это

  • вызвать скрипт Python, используя что-то вроде popen из C? Если это так, то вы можете записать данные в stdout в Python и интерпретировать данные соответствующим образом в C. Для этого вам нужно будет разработать свой собственный небольшой протокол. Это может быть специальный протокол, или вы можете использовать существующие форматы, такие как JSON, для которых вы найдете библиотеки для C и Python.

  • встроить виртуальную машину Python в вашу C-программу? Затем вам нужно будет преобразовать значения C в соответствующие Py* значения и поместить их в PyTuple, который вы можете передать как аргумент функции Python от C. Выходные данные функции Python будут PyObject, которые вам придется распаковать (в C), чтобы получить данные.

В обоих случаях вам придется самостоятельно упаковывать и распаковывать вещи.

...