Eylül 14, 2007

python ctypes; dinamik kütüphaneleri python ile kullanın

Şu an üzerinde çalıştığımız projede, hazırlanan web sayfasına bir usb security token yardımıyla giriş yapılmasına karar verdik. Bu esnada 3-4 farklı firmadan örnek olması amacıyla development kit getirttik. Bunları inceleyip, ihtiyaçlarımızı karşılayacak ürünü seçmek benim görevimdi. Bu ürünlerin API'leri arasından gezinirken, dur bakalım bir de python ile kodlayım dedim. C#'dan Pascal'a, Java'dan C'ye kadar bir çok dil için API ve ya örnek mevcuttu. Bu noktada, C için verdikleri kütüphaneyi (so uzantılı dosya), ctypes kullanarak python ile kullanma yolunu keşfettim. ctypes ile mevcut C için kullanılan binary kütüphane dosyalarını, python içinde de kullanabiliyorsunuz. Hemen örnek ile pekiştirelim;

]$ python
>>> import ctypes
>>>libc=ctypes.cdll.LoadLibrary('/lib/libc.so.6')
>>> libc.printf("Necati Demir // Python ile ctypes testi\n")
Necati Demir // Python ile ctypes testi
40

Çok basit şekilde, c ile kullandığımız printf komutunu kullandık. Ayrıca C fonksiyonlarında parametrelerin tipi belirtilir python'dan farklı olarak; f(double a) gibi. Burada da imdadımıza ctypes'in temel veri tipleri yetişiyor.
Örneğin;

>>> >>> libc.printf("An int %d, a double %f\n", 1234, ctypes.c_double(3.14))
An int 1234, a double 3.140000
31

Yukarıdaki örnekte, c_double ile bir double değeri gönderdik fonksiyona.

Ayrıntılı bilgiyi sitedeki kaynaktan bulabilirsiniz.

1 comments:

Adsız dedi ki...

Güzel Yazılar
Web Site Tasarım