Ответ 1
У Boost есть библиотека интерфейса python, которая может вам помочь.
Я хотел бы вызвать python script файлы из моей программы на С++.
Я не уверен, что у людей, которых я буду распространять, будет установлен python.
В основном я ищу .lib файл, который я могу использовать, у которого есть лицензия на дистрибутив Apache.
У Boost есть библиотека интерфейса python, которая может вам помочь.
Я хотел бы вызвать python script файлы из моей программы на С++.
Это означает, что вы хотите встроить Python в свое приложение на С++. Как упоминалось в Внедрение Python в другое приложение:
Вложение Python аналогично расширяя его, но не совсем. разница в том, что когда вы расширяетесь Python, основная программа приложение все еще Python интерпретатор, а если вы вставляете Python, основная программа может иметь не имеет ничего общего с Python - вместо этого, некоторые части приложения иногда называют Python интерпретатор для запуска кода Python.
Я предлагаю вам сначала перейти Внедрение Python в другое приложение. Затем обратитесь к приведенным ниже примерам
Если вам нравится Boost.Python, вы можете посетить следующие ссылки:
Вставка интерпретатора Python внутри вашего приложения на С++ позволит вам запускать программы Python, используя приложение, запускающее скрипты Python. Это также упростит, чтобы эти сценарии могли вызвать функции С++ в вашем приложении. Если это то, что вам нужно, то ранее упомянутая ранее библиотека Boost может быть тем, что вы хотите упростить для создания ссылки. В прошлом я использовал SWIG для создания интерфейсов Python для кода на С++. Из вашего вопроса неясно, хотите ли вы, чтобы скрипты Python вызывали вашу программу на С++ или вы просто хотели, чтобы С++ вызывал Python.
Многие из функций Python используют модули, которые не встроены в интерпретатор Python. Если ваши скрипты Python вызывают эти функции, вам необходимо либо установить Python своих пользователей, либо включить файлы времени выполнения python с вашим приложением. Это будет зависеть от того, какие модули вы импортируете в сценарии Python.
Boost, вероятно, лучший выбор, однако, если вы хотите что-то более автономное, и если оно предназначено для использования с Windows (что представляется возможным, учитывая, что они являются людьми, которые, по всей вероятности, имеют Python), вы можете используйте py2exe, чтобы создать DLL с точками входа, подходящими для COM-объектов. Затем вы можете взаимодействовать с библиотекой через COM. (Очевидно, это совсем не полезно как кросс-платформенное решение).
Интересно, что еще никто не упомянул pybind11. Из их документации:
pybind11 - это легкоspringя библиотека только для заголовков, которая предоставляет типы C++ в Python и наоборот, в основном для создания привязок Python к существующему коду C++. Его цели и синтаксис аналогичны отличной библиотеке Boost.Python Дэвида Абрахамса: минимизировать шаблонный код в традиционных модулях расширения, выводя информацию о типах с помощью самоанализа во время компиляции. [...] С момента своего создания эта библиотека вышла за пределы Boost.Python во многих отношениях, что привело к значительному упрощению связывания кода во многих распространенных ситуациях.
Конкретно, вызов функции Python (называемой встраиванием) так же прост (как взято из документации):
#include <pybind11/embed.h> // everything needed for embedding
namespace py = pybind11;
int main() {
py::scoped_interpreter guard{}; // start the interpreter and keep it alive
py::print("Hello, World!"); // use the Python API
}
Используйте системный вызов для запуска скрипта Python из C++
#include<iostream>
#include <cstdlib>
using namespace std;
int main ()
{
int result = system("/usr/bin/python3 testGen1.py 1");
cout << result;
}