On Tue, 12 Jan 2010 00:35:43 +0100, Alessandro Agosto <the.6o...@gmail.com> wrote: > Buona sera a tutti, > sto usando -e studiando- le api di python per creare moduli in C. Devo > ammettere di essere sorpreso dalla semplicità di quest'ultime è (quasi) > piacevole programmarci quanto usare puro python :)
Oddio... un pelino masochistico! Non è meglio lasciar fare il refcount a qualcosa tipo pyrex? > Attualmente volevo provare a rendere disponibile delle variabili del > modulo, > pertanto supponendo che il modulo si chiami "pymod" oltre alle varie > funzioni vorrei rendere disponibile qualche variabile direttamente da C. > Dando un occhio alla documentazione ho trovato PyModule_AddObject ( > http://docs.python.org/c-api/module.html#PyModule_AddObject) e credo di > essere sulla buona strada... il problema è che come primo parametro questa > accetta un oggetto di tipo modulo e non mi è chiaro come usarla senza > dover > creare un nuovo modulo (con PyModule_New()). > Magari ho anche sbagliato del tutto, ma in qualunque caso, qualcuno sà > come > posso/devo procedere? > Ps. mi è noto l'uso di Py_BuildValue ma creando un valore non vedo il modo > di rendere noto l'oggetto a cui ne assegno il valore costruito (infatti lo > uso nelle funzioni). La documentazione di PyModule_AddObject sembra suggerire che devi passargli il risultato della funzione Py_InitModule [1] o analoghe. Questo va fatto nella funzione di inizializzazione del modulo (initpymod nel tuo caso). Io comunque non ho mai usato PyModule_AddObject: per un esempio puoi vedere questo semplice (2 funzioni e una costante stringa) modulo di estensione [2]: il codice della initXXX() usa: - Py_InitModule4 per creare il modulo - PyModule_GetDict per ottenere il dizionario del modulo - PyDict_SetItemString per aggiungere oggetti al dizionario del modulo. Lo scheletro di questo modulo l'ho creato usando un tool mezzo abbandonato che si trova nella distribuzione sorgente di Python: Tools/modulator. Ha un po' di bit rot ma ce l'ha fatta a produrre uno scheletro che poi ho finito a mano. Comunque appena serve qualcosa un pelino più complessa ti sconsiglio di procedere a mano con l'API C nuda e cruda e ti consiglio invece Pyrex/Cython. [1] http://docs.python.org/c-api/allocation.html#Py_InitModule [2] http://code.google.com/p/py-setproctitle/source/browse/src/setproctitle.c -- Daniele Varrazzo - Develer S.r.l. http://www.develer.com _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python