Re: [Python] Python C API Creare delle variabili

2010-01-12 Per discussione Alessandro Agosto
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

2010-01-12 Per discussione Alessandro Agosto
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

2010-01-12 Per discussione Ernesto
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-01-12 Per discussione Gian Mario Tagliaretti
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