2011-10-14 8 views
5

Il mio obiettivo è in definitiva l'esecuzione di uno script python che manipoli i valori nel mio programma C++, una riga alla volta, restituendo l'esecuzione al mio programma C++ tra le istruzioni nel script python. In questo momento, sto tentando di alimentare l'interprete python del mio script una riga alla volta. Ma vuole un contesto e non ho idea di come costruirlo. Qualcuno può indicarmi alcuni buoni tutorial (la documentazione non è molto buona per questo).Esecuzione di uno script python riga per riga utilizzando l'API Python C++

Ho scelto la risposta che ha risposto più da vicino alla mia domanda, ma credo che questo potrebbe non essere il controllo sufficiente per alcune applicazioni. Una risposta che funziona per tali applicazioni potrebbe comportare chiamate di livello inferiore nell'API Python. Si prega di rispondere alla domanda se si dispone di una risposta che garantisce un maggiore controllo sull'esecuzione.

I Ho fatto un'altra domanda dopo questa, perché in seguito ho riscontrato diversi problemi che sono strettamente correlati. Link: Python C API - Stopping Execution (and continuing it later)

risposta

3

Penso che sarà difficile alimentare uno script una riga alla volta. Cerca su sys.settrace() per impostare una funzione invocata su ciascuna riga di esecuzione. Puoi anche impostarlo nell'API C utilizzando PyEval_SetTrace, in una forma leggermente diversa.

+0

Questo suona bene. Lo guarderò. Non sapevo cosa fosse una traccia. Grazie. – Miles

+0

FANTASTICO. Grazie mille! Domanda adeguatamente risposta. – Miles

1

Non sono sicuro al 100% di aver compreso appieno il tuo obiettivo, ma circa 8 mesi fa volevo fare qualcosa di simile. Volevo essere in grado di guidare la mia applicazione C++ da script Python. Ero su win32, Qt, gcc. Si scopre che in questi giorni gdb, il debugger per gcc, può essere copiato tramite python. Mi ci sono voluti un sacco di letture e pochi giorni di lavoro, ma ha funzionato bene. Non ho dovuto aggiungere alcun codice aggiuntivo nelle mie sorgenti C++!

+0

Lo esaminerò. Se funziona, segnerò risolto. – Miles

+0

GDB può accettare script in fase di runtime ed essere incluso in una versione di build? – Miles

+0

guy above aveva una soluzione: l'API python aveva una soluzione a cui ero cieco a causa dell'inesperienza nella programmazione: non sapevo cosa fosse una traccia di debug. Grazie comunque. – Miles

0

beh, vi dico cosa ... penso che la cosa migliore da fare sia convertire il vostro script python in app C++. questo è il modo in cui avrai codice funzionante e utile da incorporare nella tua fonte.
se la tua app non è così grande, forse preferisci creare un'estensione c per python e trasformare il codice Python nell'app principale ..
in entrambi i casi, lo farei in Cython. è possibile utilizzare la seguente domanda per capire come eseguire questo lavoro, se lo si desidera: Convert Python program to C/C++ code?

+0

Non voglio semplicemente effettuare il porting del mio codice Python. Sto cercando di farlo in modo da poter scrivere script che vengono letti dal mio programma in tempo reale, nella maniera descritta nel mio post iniziale. – Miles