Python выполняет существующий (& большой) код C ++ - PullRequest
1 голос
/ 02 ноября 2009

У меня есть программа на C ++, которая использует библиотеку cryptopp для расшифровки / шифрования сообщений.

Он предлагает два метода интерфейса encrypt & decrypt, которые получают строку и работают с ней с помощью cryptopp методов.

Есть ли какой-нибудь способ использовать оба метода в Python без ручного переноса всех включенных cryptopp & файлов?

Пример:

import cppEncryptDecrypt

string foo="testing"
result = encrypt(foo)
print "Encrypted string:",result

Ответы [ 2 ]

6 голосов
/ 02 ноября 2009

Если вы можете сделать DLL из этого кода C ++, выставив эти два метода (в идеале, как «extern C», который делает все сопряженные задачи намного проще), ctypes может быть ответом, не требующим любой сторонний инструмент или расширение. В противном случае, это ваш выбор между cython , старым добрым SWIG , SIP , Boost , ... - много-много таких Инструменты party позволят вашему коду Python вызывать эти две точки входа C ++ без необходимости переносить что-либо еще, кроме них.

4 голосов
/ 02 ноября 2009

Как предположил Алекс, вы можете создать dll, экспортировать функцию, к которой вы хотите получить доступ, из python и использовать модуль ctypes (http://docs.python.org/library/ctypes.html) для доступа, например,

>>> libc = cdll.LoadLibrary("libc.so.6")
>>> printf = libc.printf
>>> printf("Hello, %s\n", "World!")
Hello, World

или существует альтернативный более простой подход, который многие люди не рассматривают, но он одинаково полезен во многих случаях, то есть непосредственно вызывает программу из командной строки. Вы сказали, что у вас уже есть работающая программа, поэтому я предполагаю, что она выполняет шифрование / дешифрование из командной строки? если да, то почему бы вам просто не вызвать программу из os.system или модуля подпроцесса вместо того, чтобы копаться в коде, изменять его и поддерживать его.

Я бы сказал, идите вторым путем, если он не может удовлетворить ваши требования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...