python执行现有(&大)C++代码

Posted

技术标签:

【中文标题】python执行现有(&大)C++代码【英文标题】:python executing existent (&big) c++ code 【发布时间】:2009-11-02 02:23:21 【问题描述】:

我有一个 C++ 程序,它使用 cryptopp 库来解密/加密消息。

它提供了两个接口方法encryptdecrypt,它们接收一个字符串并通过cryptopp方法对其进行操作。

有没有什么方法可以在 Python 中同时使用这两种方法,而无需手动包装所有 cryptopp 和包含的文件?

示例:

import cppEncryptDecrypt

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

【问题讨论】:

【参考方案1】:

如果您可以从该 C++ 代码创建一个 DLL,公开这两种方法(理想情况下为“extern C”,这使得所有接口任务变得如此简单),ctypes 可以是答案,不需要任何第三方工具或扩展名。否则,您可以在cython、老旧的SWIG、SIP、Boost、...之间进行选择——很多很多这样的第三方工具会让您的 Python 代码无需任何必要地调用这两个 C++ 入口点用于包装除它们之外的其他任何东西。

【讨论】:

在 c++ 中的 make dll 上工作和学习:P。将检查 ctypes 是否像我想要的那样工作:D 是的,经过几个小时尝试这个新的 dll 的东西,我达到了目标。谢谢亚历克斯。【参考方案2】:

正如 Alex 建议的那样,您可以制作一个 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 或子进程模块调用程序,而不是深入研究代码并对其进行更改和维护。

除非它不能满足您的要求,否则我会说第二种方式。

【讨论】:

程序作为服务器(套接字)基于此加密和解密数据,然后没有命令行接口:(。除此之外,我不知道是否在每个数据包上调用 cmd 程序性能与从 dll 调用相同... 不,您甚至不应该考虑在每个数据包上启动/关闭进程,因此第二种解决方案不适用于您

以上是关于python执行现有(&大)C++代码的主要内容,如果未能解决你的问题,请参考以下文章

python & c-c++单元程序原因段

双击编译的 C++ Unix 可执行文件未打开现有文件以从中读取信息

C++中引用(&)的用法和应用实例

[转]C++中引用(&)的用法和应用实例

在 Python (linux) 中调用复杂的 C++ 函数

Operator&Scanner&Switch学习