Ringe python fra en c ++ program for distribusjon

stemmer
32

Jeg ønsker å kalle python script-filer fra min c ++ program.

Jeg er ikke sikker på at folk vil jeg dele ut til vil ha python installert.

I utgangspunktet Jeg leter etter en Lib fil som jeg kan bruke som har en Apache som distribusjonslisens.

Publisert på 08/09/2008 klokken 03:53
kilden bruker
På andre språk...                            


6 svar

stemmer
56

Jeg ønsker å kalle python script-filer fra min c ++ program.

Dette betyr at du vil legge inn Python i C ++ program. Som nevnt i Embedding Python i et annet program :

Inkludering Python er lik utvide den, men ikke helt. Forskjellen er at når du strekker Python, er hovedprogrammet på programmet fortsatt Python tolk, mens hvis du bygge Python, kan hovedprogrammet har ingenting å gjøre med Python - i stedet, noen deler av programmet og til kaller Python å kjøre noen Python-kode.

Jeg foreslår at du først gå gjennom Inkludering Python i et annet program . Så se følgende eksempler

  1. Embedding Python i C / C ++: Del I

  2. Embedding Python i C / C ++: Part II

  3. Inkludering Python i flertråds C / C ++ Applications

Hvis du liker Boost.Python , kan du gå til følgende linker:

  1. Embedding Python med Boost.Python del 1
Svarte 30/11/2008 kl. 04:52
kilden bruker

stemmer
26

Boost har et python-grensesnitt bibliotek som kan hjelpe deg.

Boost.Python

Svarte 08/09/2008 kl. 04:01
kilden bruker

stemmer
3

Boost er sannsynligvis det beste valget, men hvis du ønsker noe som er mer frittstående, og hvis dette er for bruk med Windows (som synes mulig gitt at de er folk minst sannsynlig å ha Python installert), så kan du bruke py2exe til skape en DLL med inngangspunkter som er egnet for COM-objekter. Du kan deretter grensesnitt med biblioteket via COM. (Selvfølgelig er dette ikke i det hele tatt nyttige som en kryssplattform-løsning).

Svarte 08/09/2008 kl. 10:37
kilden bruker

stemmer
3

Innebygging Python tolk inne C ++ app vil la deg kjøre Python-programmer ved hjelp av program kjøre Python-skript. Det vil også gjøre det lettere mulig for de skriptene å kalle C ++ funksjoner i programmet. Hvis dette er hva du ønsker så Boost bibliotek nevnt tidligere kan være det du ønsker å gjøre det enklere å lage link. I det siste har jeg brukt SWIG å generere Python grensesnitt til C ++ kode. Det var ikke klart fra spørsmålet ditt om du ønsket Python-skript for å ringe C ++ program eller om du ville bare C ++ til å ringe Python.

Mange av de Python funksjoner benytte moduler som ikke er bygget inn i Python. Hvis Python-skript kaller disse funksjonene vil du enten må ha brukerne installere Python eller inkludere python runtime filer med søknaden. Det vil avhenge av hva moduler du importerer i deg Python-skript.

Svarte 08/09/2008 kl. 08:36
kilden bruker

stemmer
2

Interessant, har ingen nevnt pybind11 , ennå. Fra deres dokumentasjon:

pybind11 er en lett header-bare bibliotek som eksponerer C ++ typer i Python og vice versa, hovedsakelig for å skape Python bindinger av eksisterende C ++ kode. Sine mål og syntaks er lik den utmerkede Boost.Python biblioteket ved David Abrahams: å redusere standardtekst kode i tradisjonelle utvidelsesmoduler ved dedusere typen informasjon ved hjelp av kompilere-time introspeksjon. [...] Etter etableringen, dette biblioteket har vokst utover Boost.Python på mange måter, som fører til dramatisk enklere binding kode i mange vanlige situasjoner.

Konkret kalle inn en Python-funksjon (kalt embedding) er så enkelt som dette (hentet fra dokumentasjonen ):

#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
}
Svarte 15/11/2018 kl. 17:46
kilden bruker

stemmer
0

Bruk systemkall for å kjøre en python skript fra C ++

#include<iostream>
#include <cstdlib>
using namespace std;
int main ()
{
int result = system("/usr/bin/python3 testGen1.py 1");
cout << result; 
}
Svarte 26/01/2019 kl. 21:39
kilden bruker

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