Oppure

Loading
17/04/10 9:03
napco
Ciao a tutti! Mi chiedevo se fosse possibile ottenere la referenza di un oggetto dichiarato all'interno di uno script Python conoscendone il nome. Finora l'unico modo che ho trovato è stato quello di registrare una funzione C in Python che come argomento accetta un oggetto di qualsiasi tipo e chiamarla dallo script stesso passando l'oggetto in questione, ma è una soluzione piuttosto scomoda (ed inutile). Quello che mi servirebbe sarebbe più che altro qualcosa del genere:

#script.py

def la_mia_funzione():
    pass


//main.c

int main(int argc, char *argv[])
{
    // Inizializzazione interprete, esecuzione di script.py ecc...

    PyObject *la_mia_funzione = Py_OttieniOggettoConoscendoneIlNome("la_mia_funzione");

    // Chiamata funzione, finalizzazione interprete ecc...
}


E' possibile?
aaa
18/04/10 9:59
ovviamente è possibile
docs.python.org/extending/…
leggi e cerca bene, vedrai che trovi =P
22/04/10 16:45
napco
Sarò mezzo cieco, ma ti giuro che non ho trovato niente di simile tra le api del Python! L'unico modo per ottenere la referenza ad un oggetto che ho trovato è quello di passarlo dal Python al C++ come argomento di una qualsiasi funzione ed estrapolarlo poi con PyArg_ParseTuple... A me interesserebbe invece ottenere la referenza direttamente dal C++, conoscendo il nome dell'oggetto in questione ed ottenendo al massimo un Py_None se non viene trovato. Ho provato per conto mio a parsare le variabili globali/locali dello script senza successo...

Una soluzione alternativa sarebbe quella di manipolare l'oggetto tramite PyRun_SimpleString, ma se l'oggetto è inesistente mi da errore!
aaa