запуск кода c++ из python

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

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

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

def parse_arguments:
  ...# some code
  return arguments

Теперь, как мне общаться между python и c++. Я читал и видел, что cython, boost python - это варианты, но мне трудно найти правильный простой пример приветствия, мир.

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


person frazman    schedule 20.06.2012    source источник
comment
Исходный код C++ не выполняется.   -  person Ignacio Vazquez-Abrams    schedule 20.06.2012
comment
Ваше решение мне не нравится, но, возможно, я упускаю какой-то контекст. Почему вы решили анализировать аргументы с помощью Python?   -  person    schedule 20.06.2012
comment
@Grigory: я использую одну из фреймворков, написанных на C++, в то время как я в основном использую python... На данный момент я сначала собираю данные и вывожу что-то из python... а затем этот вывод необходимо передать в этот фреймворк C++ . На данный момент я сохраняю все в текстовом файле на промежуточном этапе, а затем читаю этот файл на С++, но я хочу интегрировать их вместе... как лучше всего это сделать. Спасибо   -  person frazman    schedule 20.06.2012
comment
@IgnacioVazquez-Abrams: Привет. Спасибо за комментарий. Тогда какой хороший способ обойти это. Спасибо.   -  person frazman    schedule 20.06.2012
comment
Во-первых, расскажите нам, что у вас на самом деле есть.   -  person Ignacio Vazquez-Abrams    schedule 20.06.2012
comment
@IgnacioVazquez-Abrams: копируя комментарий, который я только что написал, я использую одну из платформ, написанных на C ++, в то время как я в основном использую python ... На данный момент я сначала собираю данные и вывожу что-то из python ... а затем этот вывод необходимо было передать этой структуре C++. На данный момент я сохраняю все в текстовом файле на промежуточном этапе, а затем читаю этот файл на С++, но я хочу интегрировать их вместе... как лучше всего это сделать. Спасибо-спасибо.   -  person frazman    schedule 20.06.2012


Ответы (4)


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

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

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

person Community    schedule 20.06.2012

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

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

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

person jmf_zaiecp    schedule 20.06.2012

Помимо Boost.python есть еще несколько вариантов: SIP и SWIG (упрощенная оболочка и генератор интерфейса). Как и Boost, SIP и SWIG имеют открытый исходный код.

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

person David Hammen    schedule 20.06.2012

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

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

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

person duselbaer    schedule 20.06.2012