python-logo

Utilizando Shared Objects no Python

Python é realmente uma linguagem muito versátil, tendo a mão quase sempre tudo o que se precisa fazer. Então, a algum tempo atrás eu precisava verificar a possibilidade de carregar um Shared Object com o Python, e eis que encontrei. A documentação do Python é realmente muito útil, com exemplos de utilização de módulos, inclusive do módulo em questão.

Para poder carregar a lib, eu utilizei o módulo ctypes. Este módulo provê tipos de dados compatíveis com o C e permite chamar bibliotecas, como DDLs e shared objects. Para iniciar o exemplo, eu criei uma lib, na verdade um shared object, a seguir:

Para compliar esta lib basta executar: gcc -Wall minha_lib.c -shared -fPIC -o /tmp/minha_lib.so Como mostra o fonte, esta lib terá 3 funções bem simples: somar, incremento e criação de um arquivo. A lib compilada será colocada no /tmp para não ter problemas com pessoas executando o código em diferentes máquinas. Segue abaixo o código Python que fará uso desta nova biblioteca que acabamos de compilar:

Explicação do código:
A função CDLL carrega a lib especificada como parâmetro e retorna um objeto com os mesmos métodos que existem dentro da biblioteca do parâmetro. Após carregar a lib, podemos utilizar as funções como se fossem métodos do Python.

Este exemplo mostrou como interagir com Shared Objects, mas interagir com DLLs é igualmente fácil. Na documentação oficial do ctypes é mostrado como fazer esta integração.

Espero que tenham gostado deste artigo, que mostra de mostra bem simples como interagir com shared objects. Até a próxima!

Referência:
cytpes

  • Muito legal a dica! =)

    • Marcos Souza

      @benatto:disqus , que foto de Brad Pitt eh essa cara? 🙂

      Po, que bacana que curtiu cara! Fico feliz em ver teus comentarios aqui 😉

      • Estava brincando com essa feature. Quand voce tem tipos proprios com structs, unions e ponteiros misturados, fica um pouco mais complicado :D. Sempre acompanho o blog! Abrasss

        • Marcos Souza

          @benatto:disqus , ah mais ai com com struct, unios e o resto eu nunca fiz esse mapping do C->Python…

          Se fizer, manda ai pra mim ver 🙂

          E obrigado de novo por ler nosso humilde blog!!

  • Muito legal a dica! =)

    • Marcos Souza

      @benatto:disqus , que foto de Brad Pitt eh essa cara? 🙂

      Po, que bacana que curtiu cara! Fico feliz em ver teus comentarios aqui 😉

      • Estava brincando com essa feature. Quand voce tem tipos proprios com structs, unions e ponteiros misturados, fica um pouco mais complicado :D. Sempre acompanho o blog! Abrasss

        • Marcos Souza

          @benatto:disqus , ah mais ai com com struct, unios e o resto eu nunca fiz esse mapping do C->Python…

          Se fizer, manda ai pra mim ver 🙂

          E obrigado de novo por ler nosso humilde blog!!

  • Muito legal a dica! =)

    • Marcos Souza

      @benatto:disqus , que foto de Brad Pitt eh essa cara? 🙂

      Po, que bacana que curtiu cara! Fico feliz em ver teus comentarios aqui 😉

      • Estava brincando com essa feature. Quand voce tem tipos proprios com structs, unions e ponteiros misturados, fica um pouco mais complicado :D. Sempre acompanho o blog! Abrasss

        • Marcos Souza

          @benatto:disqus , ah mais ai com com struct, unios e o resto eu nunca fiz esse mapping do C->Python…

          Se fizer, manda ai pra mim ver 🙂

          E obrigado de novo por ler nosso humilde blog!!