Re: [Python] Python C API Creare delle variabili

2010-01-14 Per discussione Alessandro Agosto
Il giorno 12 gennaio 2010 21.58, Gian Mario Tagliaretti
ha scritto:

> 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
>
> Ciao,
anzitutto grazie della segnalazione, dare un occhio a quel codice mi è
servito per assicurarmi di usare le varie funzioni in modo appropriato.
Ho guardato come viene salvata la referenza alla creazione del modulo e come
viene usato con PyModule_AddObject e ho anche notato che, come suggeriva
Daniele che dal modulo viene ricavato il dizionario e cosi aggiunti altri
oggetti.
Per il mio scopo userò comunque la funzione apposita,
grazie ancora per la risposta.

Buona serata.

-- 
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 Gian Mario Tagliaretti
2010/1/12 Alessandro Agosto :

> 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


Re: [Python] Python C API Creare delle variabili

2010-01-12 Per discussione Alessandro Agosto
Il giorno 12 gennaio 2010 04.32, Daniele Varrazzo  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


Re: [Python] Python C API Creare delle variabili

2010-01-12 Per discussione Alessandro Agosto
Il giorno 12 gennaio 2010 04.32, Daniele Varrazzo  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


Re: [Python] Python C API Creare delle variabili

2010-01-11 Per discussione Daniele Varrazzo
On Tue, 12 Jan 2010 00:35:43 +0100, Alessandro Agosto

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


[Python] Python C API Creare delle variabili

2010-01-11 Per discussione Alessandro Agosto
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 :)

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).

Grazie a tutti e buona notte.
-- 
Alessandro A.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python