Chamando python a partir de um programa C ++ para distribuição

votos
29

Gostaria de chamar arquivos de script python do meu programa c ++.

Não tenho a certeza que as pessoas que vão distribuir aos terá python instalado.

Basicamente, eu estou procurando um arquivo .lib que eu possa usar que tem um Apache como licença de distribuição.

Publicado 08/09/2008 em 04:53
fonte usuário
Em outras línguas...                            


6 respostas

votos
53

Gostaria de chamar arquivos de script python do meu programa c ++.

Isso significa que você deseja incorporar Python em sua aplicação C ++. Conforme mencionado na Embedding Python em outro aplicativo :

Embedding Python é semelhante ao estendê-lo, mas não completamente. A diferença é que quando você estender Python, o principal programa da aplicação ainda é o interpretador Python, enquanto que, se você incorporar Python, o programa principal pode não ter nada a ver com Python - em vez disso, algumas partes do aplicativo ocasionalmente chamar o interpretador Python para executar algum código Python.

Eu sugiro que você primeiro passar por Embedding Python em outro aplicativo . Em seguida, referem-se os seguintes exemplos

  1. Incorporação Python em C / C ++: Parte I

  2. Incorporação de pitão em C / C ++: Parte II

  3. Incorporação de pitão em multi-threaded C / C ++ Aplicações

Se você gosta Boost.Python , você pode visitar os seguintes links:

  1. Incorporação Python com Boost.Python Parte 1
Respondeu 30/11/2008 em 05:52
fonte usuário

votos
23

Impulso tem uma biblioteca de interface python que poderia ajudá-lo.

Boost.Python

Respondeu 08/09/2008 em 05:01
fonte usuário

votos
2

Curiosamente, ninguém mencionou pybind11 , ainda. A partir de sua documentação:

pybind11 é uma biblioteca de somente cabeçalho leve que expõe tipos C ++ no pitão e vice-versa, principalmente para criar ligações Python de código existente C ++. Seus objetivos e sintaxe são semelhantes aos da excelente biblioteca Boost.Python por David Abrahams: para minimizar o código clichê em módulos de extensão tradicionais inferindo informações tipo usando em tempo de compilação introspecção. [...] Desde a sua criação, esta biblioteca tem crescido para além Boost.Python em muitos aspectos, levando ao código de ligação dramaticamente mais simples em muitas situações comuns.

Concretamente, pondo em uma função Python (chamado de incorporação) é tão simples como isto (tomadas a partir da documentação ):

#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
}
Respondeu 15/11/2018 em 17:46
fonte usuário

votos
2

Boost é provavelmente a melhor escolha, no entanto, se você está querendo algo que é mais independente e se isto é para uso com o Windows (o que parece viável, uma vez que eles são as pessoas menos prováveis de ter o Python instalado), então você pode usar py2exe para criar uma DLL com pontos de entrada adequados para objetos cOM. Em seguida, você pode interagir com a biblioteca via COM. (Obviamente, isso não é de todo útil como uma solução de plataforma cruzada).

Respondeu 08/09/2008 em 11:37
fonte usuário

votos
2

Embeding o interpretador Python dentro do seu aplicativo C ++ permite executar programas em Python usando seu aplicativo Executar scripts Python. Ele também irá torná-lo mais fácil possível para esses scripts para chamar funções C ++ na sua aplicação. Se é isso que você quer, então a biblioteca de impulso mencionado anteriormente pode ser o que você quer para tornar mais fácil para criar o link. No passado, eu usei SWIG para gerar interfaces de Python para código C ++. Não era claro da sua pergunta se você queria que os scripts Python para chamar o seu programa C ++ ou se você só queria o C ++ para chamar Python.

Muitas das funções Python usar módulos que não estão embutidos no interpretador Python. Se seus scripts Python chamar essas funções, em seguida, você nem precisa ter seus usuários instalar Python ou incluir os arquivos de tempo de execução do Python com o seu pedido. Vai depender de módulos que importar em você scripts Python.

Respondeu 08/09/2008 em 09:36
fonte usuário

votos
0

Use chamada de sistema para executar um script python de C ++

#include<iostream>
#include <cstdlib>
using namespace std;
int main ()
{
int result = system("/usr/bin/python3 testGen1.py 1");
cout << result; 
}
Respondeu 26/01/2019 em 21:39
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more