Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Python - C API - Ottenere la referenza (PyObject *) di un oggetto conoscendone il nome.
Forum - Python - C API - Ottenere la referenza (PyObject *) di un oggetto conoscendone il nome.

Avatar
napco (Normal User)
Pro


Messaggi: 64
Iscritto: 16/04/2010

Segnala al moderatore
Postato alle 11:03
Sabato, 17/04/2010
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:

Codice sorgente - presumibilmente Python

  1. #script.py
  2.  
  3. def la_mia_funzione():
  4.     pass



Codice sorgente - presumibilmente Python

  1. //main.c
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.     // Inizializzazione interprete, esecuzione di script.py ecc...
  6.  
  7.     PyObject *la_mia_funzione = Py_OttieniOggettoConoscendoneIlNome("la_mia_funzione");
  8.  
  9.     // Chiamata funzione, finalizzazione interprete ecc...
  10. }



E' possibile?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 11:59
Domenica, 18/04/2010
ovviamente è possibile
http://docs.python.org/extending/extending.html
leggi e cerca bene, vedrai che trovi =P

PM Quote
Avatar
napco (Normal User)
Pro


Messaggi: 64
Iscritto: 16/04/2010

Segnala al moderatore
Postato alle 18:45
Giovedì, 22/04/2010
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!

PM Quote