ctypes
06-Jun-08
El otro día me encontré con un módulo interesante de python que no conocía: ctypes. Sirve para comunicarse con librerías en C: permite cargar librerías dinámicas y llamar a sus funciones, definir tipos equivalentes a los de C para pasarlos de un lado a otro e incluso especificar funciones python como callbacks de C. Vamos, que se pueden crear bindings a librerías externas escribiendo únicamente código python.
Ahi va un ejemplillo tonto usando la libavformat:
#!/usr/bin/python
import sys
from ctypes import *
import ctypes.util
av = CDLL(ctypes.util.find_library("avformat"))
filename = sys.argv[1]
# pFormatCtx deberia ser un puntero a AVFormatContext,
# pero esto es solo un ejemplo simple :)
pFormatCtx = c_void_p()
av.av_register_all()
av.av_open_input_file(byref(pFormatCtx), filename, None, 0, None)
av.dump_format(pFormatCtx, 0, filename, 0)
Por supuesto para hacer algo más serio habría que declarar en python las estructuras como AVFormatContext que se definen en las cabeceras correspondientes y cosas así, pero entonces el programa de ejemplo sería demasiado engorroso como para leerlo en un blog ;). El ejemplo muestra una salida como esta:
$ ./av.py test.avi Input #0, avi, from 'test.avi': Duration: N/A, bitrate: N/A Stream #0.0: Video: mpeg4, 512x420, inf fps(c) Stream #0.1: Audio: vorbis, 22050 Hz, stereo, 24 kb/s
Referencias:
