Вопрос по cython, c++, python, boost-python, ctypes – запуск кода C ++ из Python

7

Я хочу выполнить код helloword.cpp, который принимает какой-либо аргумент из консоли, анализирует эти аргументы и затем выводит «hello world». в консоли.

Теперь я хочу проанализировать эти аргументы из скриптов Python parsearguments.py

Так, например:

def parse_arguments:
  ...# some code
  return arguments

Теперь, как мне общаться между Python и C ++. Я читал и вижу, что Cython, Boost Python являются вариантами, но мне трудно найти правильный простой пример Hello World.

Любые предложения будут оценены. Спасибо

Во-первых, расскажите нам, что выreally иметь. Ignacio Vazquez-Abrams
@Grigory: я использую одну из фреймворков, написанных на c ++, в то время как я в основном использую python ... На данный момент я сначала собираю данные и выводю что-то из python ... а затем этот вывод необходим для передачи этой фреймворк C ++ , На данный момент я сохраняю все в текстовом файле на промежуточном этапе, а затем читаю этот файл в C ++, но я хочу объединить их вместе ... что является лучшим способом сделать это. Спасибо Fraz
Ваше решение мне не нравится, но, может быть, мне не хватает какого-то контекста. Почему вы решили проанализировать аргументы с Python? user500944
@ IgnacioVazquez-Abrams: Привет. Спасибо за комментарий. Тогда какой хороший способ обойти это. Благодарю. Fraz
Один не выполняет исходный код C ++. Ignacio Vazquez-Abrams

Ваш Ответ

4   ответа
8

вы можете эффективно использовать Boost Python, вот учебник: http://www.boost.org/doc/libs/1_59_0/libs/python/doc/index.html Вы пишете своего рода оболочку вне вашего кода C ++.

Если это код на C, то в Python есть внутренняя библиотека ctypes.

В обоих случаях вы должны скомпилировать код C / C ++ в разделяемую библиотеку.

4

SIP и SWIG (Упрощенная Обертка и Генератор Интерфейса). Как и Boost, SIP и SWIG с открытым исходным кодом.

SWIG особенно мощен, но и немного волосат. Он обеспечивает поддержку взаимодействия C и C ++ с множеством других языков, включая (не полный список) Python, Perl, Lua, Tcl / Tk, Ocaml, Ruby, Java. Одним из аспектов SWIG является то, что он анализирует ваши заголовки C ++. Это имеет свои преимущества и подводные камни. Преимущество заключается в том, что он выполняет большую часть работы по созданию интерфейсов. Недостатком является то, что он не обрабатывает некоторые темные углы C ++ 2003, и он вообще не подошел к C ++ 11. Еще одним недостатком является то, что компиляция большого проекта становится медленным. Очень, очень медленно.

2

ависимости от вашего опыта C ++ это может быть довольно сложно. Хорошая точка для начала здесь:

http://wiki.python.org/moin/boost.python

Boost.Python позволяет экспортировать классы C ++ и функции-члены в Python, чтобы иметь возможность использовать их оттуда.

6

который вы генерируете с помощью Python, в стандартный ввод вашей программы на C ++? По сути, вы должны использовать Pythonsubprocess модуль для запуска программы на C ++ и вывода текста в стандартный вывод.

В случае, если ваша программа на C ++ должна работать отдельно в фоновом режиме, вы можете попробовать другую форму межпроцессного взаимодействия, например, доменные сокеты unix.

Использование boost :: python также является опцией, но с ней может быть немного сложнее иметь дело.

Похожие вопросы