[pyar] Acceder a constantes de bibliotecas C con Python usando ctypes
Angel Guzman Maeso
shakaran en gmail.com
Sab Oct 9 14:37:22 ART 2010
Hola lista,
Estoy trasteando un poco con la biblioteca ctypes para usar bibliotecas
compartidas escritas en C desde Python.
No he tenido problemas hasta ahora para usarla, salvo cuando necesito
acceder a constantes que posea la biblioteca.
Por ejemplo, usando la biblioteca de MPI en C (ya se que existen
implementaciones en python, pero quiero utilizarla nativamente) necesito
acceder a
una constanet llamada MPI_COMM_WORLD
En la documentación oficial:
http://docs.python.org/library/ctypes.html#accessing-values-exported-from-dlls
solo se muestra un pequeño ejemplo para acceder a una constante, pero es de
la propia python C api y no he sabido trasladar el ejemplo o como usarlo
para otra biblioteca.
Este es mi código de ejemplo (tambien en pastebin:
http://pastebin.com/zcmtQ4G6 ):
#!/usr/bin/python
import sys
try:
from ctypes import CDLL, pythonapi, c_int, POINTER, c_char_p, byref,
RTLD_GLOBAL
from ctypes.util import find_library
except ImportError:
print 'ERROR! La libreria *ctypes* para Python no esta disponible!'
sys.exit(-1)
libc = CDLL('libc.so.6')
print libc._handle, libc._name
f = pythonapi.Py_GetArgcArgv
argc = c_int()
argv = POINTER(c_char_p)()
f(byref(argc), byref(argv))
mpi = CDLL(find_library('mpi'), RTLD_GLOBAL)
print mpi._handle, mpi._name
myrank = c_int();
nprocs = c_int();
opt_flag = c_int.in_dll(pythonapi, "MPI_COMM_WORLD") # Aqui falla al acceder
a MPI_COMM_WORLD
#mpi.MPI_Comm_size(mpi.MPI_COMM_WORLD, byref(nprocs)); # Lo necesito aqui,
pero no funciona MPI_COMM_WORLD
libc.printf("Hello from processor %d of %d\n", myrank, nprocs);
mpi.MPI_Finalize()
--------
En teoria se accede con el método in_dll() pero no consigo extraer el valor
y me falla con un:
Traceback (most recent call last):
File "memory.py", line 36, in <module>
opt_flag = c_int.in_dll(pythonapi, "MPI_COMM_WORLD")
ValueError: python: undefined symbol: MPI_COMM_WORLD
Espero vuestra ayuda.
Saludos
--
*Blog*: www.shakaran.net
*Tivion*: un simple reproductor de canales streaming de TV
www.shakaran.net/blog/tivion
*Mi juego de rol online*: www.apogeus.es & www.apogeus.es/ao
*Hosting económico y profesiona**l*: www.quijost.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20101009/d462c34f/attachment.html>
More information about the pyar
mailing list