Вызов функций C ++ через скрипт Python

У меня есть сценарий, в котором у меня есть некоторые функции в классах C ++, и я хочу, чтобы их можно было вызвать с помощью скрипта python. Допустим, у меня есть функция

void greet(_msg); std::cout >> _msg >> std::endl; 

Я хочу, чтобы иметь возможность вызвать его через пользовательский вызов Python и передать ему аргументы, например, используя

 saySomething("Hello") 

В качестве .py-файла я хочу, чтобы он вызывал функцию greet и передавал «Hello» в качестве аргумента.

Я знаю, что это тема, которая была обсуждена до конца, и я сделал часть исследований по внедрению python в C ++, мне удалось прочитать значения из сценария python с использованием стандартного API Python / C и запустить функцию в Python от C ++ и передать аргумент, но я не могу понять, как достичь этого конкретного результата.

Я посмотрел на ctypes и различные библиотеки обертки, такие как boost: python или swig, но я не могу понять, в какой степени они могут помочь мне достичь желаемого.

3 Solutions collect form web for “Вызов функций C ++ через скрипт Python”

В зависимости от того, какую версию Python вас интересует, 2.x или 3.x, прочитайте раздел Расширение и вложение главы Python Interpreter для 2.x или 3.x. Вы заинтересованы только в расширении Python, поэтому раздел 1. Расширение Python с помощью C или C ++ предоставит вам полное объяснение, как реализовать то, что вам нужно, чтобы иметь возможность вызывать ваши функции, реализованные на C ++, из сценария Python.

Конечно, существует множество библиотек и генераторов, которые позволяют вам обертывать API-интерфейсы C / C ++ для Python (например, Boost.Python или SWIG ), но ваше дело звучит достаточно просто, что для обучения это ИМО лучше познакомиться с Python C API. Даже если вы используете эти инструменты, вам часто придется приступать к API Python C или, по крайней мере, понимать это.

Мне недавно нужно было это сделать. Boost.Python делает то, что мы ищем (и многое другое), но лично (насколько мне нравится Boost). Мне кажется, что немного переборщить, чтобы перетащить половину библиотеки Boost, чтобы получить одну функцию. SWIG также не был для меня вариантом, поскольку генерация кода всегда становится болью для поддержания, пока меняются структуры классов (не поймите меня неправильно, это решения BRILLIANT !, просто не то, что я искал).

Итак, единственное, что оставалось для меня, – это реализовать его с первых принципов (Python / C API). Hense, «ECS: Python» родился. ECS: Python (Embedded C ++ Scripting с Python) – это простая библиотека обложек C ++ Python, разработанная специально для разработчиков на C ++. Он позволяет выставлять объекты из приложения C ++ во встроенный интерпретатор Python для интерактивных скриптов, и он очень легкий и простой в использовании.

Его бесплатный (BSD) и открытый источник. Если вас это интересует, это: http://sourceforge.net/projects/ecspython

Вы можете использовать функцию weave.inline (), которая является частью пакета scipy, для компиляции и выполнения файлов C / C ++ и получения их результатов из вашего сценария python.

Python - лучший язык программирования в мире.