
Θα ήθελα να καλέσω τα αρχεία script python από γ πρόγραμμά μου ++. 


Δεν είμαι σίγουρος ότι οι άνθρωποι θα διανείμει σε θα έχουν εγκατασταθεί python.


Βασικά Ψάχνω για ένα αρχείο .lib που μπορώ να χρησιμοποιήσω ότι έχει Apache, όπως άδεια διανομής.

 
Κλήση python από ένα C ++ πρόγραμμα για τη διανομή
==================================================



Boost διαθέτει βιβλιοθήκη διεπαφή python που θα μπορούσε να σας βοηθήσει.


[Boost.Python](http://www.boost.org/doc/libs/release/libs/python/doc/index.html)

 

Embeding το διερμηνέα Python μέσα C ++ σας εφαρμογή θα σας αφήσει να τρέξει προγράμματα Python χρησιμοποιώντας την εφαρμογή σενάρια εκτέλεσης Python σας. Θα διευκολύνει επίσης δυνατόν για αυτά τα σενάρια να καλέσετε λειτουργίες C ++ στην εφαρμογή σας. Εάν αυτό είναι ό, τι θέλετε, στη συνέχεια, η βιβλιοθήκη Boost αναφέρθηκε προηγουμένως μπορεί να είναι αυτό που θέλετε να κάνετε είναι πιο εύκολο να δημιουργήσετε τη σύνδεση. Στο παρελθόν έχω χρησιμοποιήσει [SWIG](http://www.swig.org/) να δημιουργήσει διασυνδέσεις Python σε κώδικα C ++. Δεν ήταν σαφές από την ερώτησή σας αν ήθελες τα σενάρια Python για να καλέσετε C σας πρόγραμμα ++ ή αν ήθελε απλά τη C ++ για να καλέσετε Python.


Πολλές από τις λειτουργίες Python χρησιμοποιεί ενότητες που δεν έχουν ενσωματωμένη στο διερμηνέα Python. Αν σενάρια Python σας καλούν αυτές τις λειτουργίες, τότε θα πρέπει είτε να έχουν οι χρήστες σας να εγκαταστήσετε την Python ή να περιλαμβάνει τα αρχεία χρόνου εκτέλεσης python με την αίτησή σας. Θα εξαρτηθεί από το τι ενότητες που εισάγετε σε σας Python scripts.

 

Boost είναι ίσως η καλύτερη επιλογή, ωστόσο, αν θέλουν κάτι που είναι πιο αυτόνομο και αν αυτό προορίζεται για χρήση με τα Windows (που φαίνεται εφικτό δεδομένου ότι οι άνθρωποι είναι λιγότερο πιθανό να έχουν Python εγκατεστημένη), τότε μπορείτε να χρησιμοποιήσετε [py2exe](http://www.py2exe.org) να δημιουργήσετε ένα αρχείο DLL με τα σημεία εισόδου κατάλληλο για αντικείμενα COM. Στη συνέχεια, μπορούν να διασυνδεθούν με τη βιβλιοθήκη μέσω του COM. (Προφανώς αυτό δεν είναι καθόλου χρήσιμη ως ένα διάλυμα cross-platform).

 


> 
> Θα ήθελα να καλέσω τα αρχεία script python από γ πρόγραμμά μου ++.
> 
> 
> 


Αυτό σημαίνει ότι θέλετε να ενσωματώσετε Python σε εφαρμογή C ++ σας. Όπως αναφέρεται στην [Ενσωμάτωση Python σε άλλη εφαρμογή](http://docs.python.org/extending/embedding.html) :



> 
> Ενσωμάτωση Python είναι παρόμοιο με την παράταση αυτή, αλλά δεν είναι αρκετά. Η διαφορά είναι ότι όταν εκτείνονται Python, το κύριο πρόγραμμα της εφαρμογής εξακολουθεί να είναι ο διερμηνέας Python, ενώ αν ενσωματώσετε την Python, το κύριο πρόγραμμα μπορεί να έχει τίποτα να κάνει με την Python - αντ 'αυτού, ορισμένα τμήματα της αίτησης κατά καιρούς καλέστε το διερμηνέα Python να τρέξει κάποιο κώδικα Python.
> 
> 
> 


Προτείνω ότι πρέπει πρώτα να περάσουν από [Ενσωμάτωση Python σε άλλη εφαρμογή](http://docs.python.org/extending/embedding.html) . Στη συνέχεια αναφέρονται τα ακόλουθα παραδείγματα


1. [Ενσωμάτωση Python σε C / C ++: Μέρος Ι](http://www.codeproject.com/KB/cpp/embedpython_1.aspx)
2. [Ενσωμάτωση Python σε C / C ++: Μέρος ΙΙ](http://www.codeproject.com/KB/cpp/embedpython_2.aspx)
3. [Ενσωμάτωση Python σε multi-threaded C / C ++ Εφαρμογές](http://www.linuxjournal.com/article/3641)


Αν σας αρέσει [Boost.Python](http://www.boost.org/doc/libs/release/libs/python/doc/tutorial/doc/html/python/embedding.html) , μπορείτε να επισκεφθείτε τους παρακάτω συνδέσμους:


1. [Ενσωμάτωση Python με Boost.Python Μέρος 1](http://members.gamedev.net/sicrane/articles/EmbeddingPythonPart1.html)

 

Είναι ενδιαφέρον, κανείς δεν έχει αναφερθεί [pybind11](https://pybind11.readthedocs.io/) , ακόμα. Από την τεκμηρίωσή τους:



> 
> pybind11 είναι ένα ελαφρύ μόνο με κεφαλίδα βιβλιοθήκη που εκθέτει C ++ οι τύποι του Python και αντιστρόφως, κυρίως για τη δημιουργία Python δέστρες των υφιστάμενων C κώδικα ++. τους στόχους και τη σύνταξη του είναι παρόμοια με την εξαιρετική βιβλιοθήκη Boost.Python από τον David Abrahams: για την ελαχιστοποίηση στερεότυπο κώδικα σε παραδοσιακές μονάδες επέκτασης συνάγοντας πληροφορίες τύπου χρησιμοποιώντας μεταγλώττιση χρόνο ενδοσκόπηση. [...] Από την ίδρυσή της, ότι αυτή η βιβλιοθήκη έχει αυξηθεί πέρα ​​από Boost.Python με πολλούς τρόπους, που οδηγεί σε δραματικά απλούστερο κώδικα δέσμευσης σε πολλές κοινές καταστάσεις.
> 
> 
> 


Συγκεκριμένα, θέτοντας υπό μία συνάρτηση Python (ονομάζεται ενσωμάτωση) είναι τόσο απλό όσο αυτό (που λαμβάνονται από την [τεκμηρίωση](https://pybind11.readthedocs.io/en/stable/advanced/embedding.html) ):



```
#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 script από την C ++



```
#include<iostream>
#include <cstdlib>
using namespace std;
int main ()
{
int result = system("/usr/bin/python3 testGen1.py 1");
cout << result; 
}

```
 