Re: [Python] Python C API Creare delle variabili
Il giorno 12 gennaio 2010 04.32, Daniele Varrazzo p...@develer.com ha scritto: Oddio... un pelino masochistico! Non è meglio lasciar fare il refcount a qualcosa tipo pyrex? ma LOL. Beh il mio intento è anche quello di studiarmi le API e credo che usandole direttamente nel C sia il modo migliore, anche perchè ho in mente un paio di moduli in cui dovrei usare delle librerie in C, diciamo che le scuse per questa scelta non mancano :p certo che poi la soluzione da te proposta è migliore quando è, ad esempio, per lavoro, ma non è questo il mio caso -non ancora-. 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). Ah ecco, io pensavo dovessi proprio usare PyModule_New, ho invece fatto come dici tu, salvando il riferimento della Py_InitModule() e provando con quello e funziona tutto alla perfezione :) 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. Uhm, è bene tenerlo a mente :) nel mio caso comunque và benissimo PyModule_AddObject, in quanto devo solo rendere disponibile come variabile un dizionario con dei valori predefiniti per un utilizzo rapido 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. Darò una occhiata anche a questo, ma se già dici che è mezzo abbandonato... le alternative non mancano e poi, sinceramente, il modulo in questione l'ho scritto da zero e ho ottenuto subito qualcosa di funzionante per alcuni test. 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.chttp://lists.python.it/mailman/listinfo/python Già, credo proprio che darò un occhio a Pyrex, l'avevo già fatto ma mai seriamente e soprattutto senza mai usarlo. Grazie ancora per il tuo aiuto, sei stato molto prezioso :) -- Alessandro A. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Python C API Creare delle variabili
Il giorno 12 gennaio 2010 04.32, Daniele Varrazzo p...@develer.com ha scritto: Oddio... un pelino masochistico! Non è meglio lasciar fare il refcount a qualcosa tipo pyrex? ma LOL. Beh il mio intento è anche quello di studiarmi le API e credo che usandole direttamente nel C sia il modo migliore, anche perchè ho in mente un paio di moduli in cui dovrei usare delle librerie in C, diciamo che le scuse per questa scelta non mancano :p certo che poi la soluzione da te proposta è migliore quando è, ad esempio, per lavoro, ma non è questo il mio caso -non ancora-. 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). Ah ecco, io pensavo dovessi proprio usare PyModule_New, ho invece fatto come dici tu, salvando il riferimento della Py_InitModule() e provando con quello e funziona tutto alla perfezione :) 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. Uhm, è bene tenerlo a mente :) nel mio caso comunque và benissimo PyModule_AddObject, in quanto devo solo rendere disponibile come variabile un dizionario con dei valori predefiniti per un utilizzo rapido 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. Darò una occhiata anche a questo, ma se già dici che è mezzo abbandonato... le alternative non mancano e poi, sinceramente, il modulo in questione l'ho scritto da zero e ho ottenuto subito qualcosa di funzionante per alcuni test. 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 Già, credo proprio che darò un occhio a Pyrex, l'avevo già fatto ma mai seriamente e soprattutto senza mai usarlo. Grazie ancora per il tuo aiuto, sei stato molto prezioso :) -- Alessandro A. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
[Python] funzione unpack
Ciao a tutti, mi chiedevo se in python ci fosse una funzione simile alla seguente: $bits = unpack(B32,$value); che permette di ottenere una bit string. Ho provato con il modulo struct anche se non sembra ci sia qualcosa di equivalente. Esiste la funzione struct.unpack() ma non restituisce la stessa cosa. Come posso, inoltre, verificare se il sistema su cui sto lavorando è little-endian o big-endian? Grazie, Ernesto ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Python C API Creare delle variabili
2010/1/12 Alessandro Agosto the.6o...@gmail.com: 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()). http://git.gnome.org/browse/pygtk/tree/gtk/gtkmodule.c guarda la funzione init_gtk http://git.gnome.org/browse/pygtk/tree/gtk/gtkmodule.c#n192 alla riga 211 viene inizializzato il modulo (m) poi ad un certo punto viene chiamata la funzione pygtk_add_extra_constants che prende come parametro il modulo (m), e nella funzione viene usato PyModule_AddObject http://git.gnome.org/browse/pygtk/tree/gtk/gtkmodule.c#n160 come primo parametro viene passato il modulo, per l'appunto (m) ciao -- Gian Mario Tagliaretti GNOME Foundation member gia...@gnome.org ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python