你如何从C代码调用Python代码?

pgb*_*pgb 40 c python interop cross-domain

我想扩展一个带有一些新功能的大型C项目,但我真的想用Python编写它.基本上,我想从C代码调用Python代码.但是,像SWIG这样的Python-> C包装器允许OPPOSITE,即编写C模块并从Python调用C语言.

我正在考虑一种涉及IPC或RPC的方法(我不介意有多个进程); 也就是说,让我的纯Python组件在一个单独的进程中运行(在同一台机器上),让我的C项目通过从套接字(或unix管道)写入/读取来与之通信.我的python组件可以读/写socket来进行通信.这是一种合理的方法吗?还有更好的东西吗?像一些特殊的RPC机制?

感谢到目前为止的答案 - 但是,我想专注于基于IPC的方法,因为我希望将我的Python程序作为我的C程序在一个单独的过程中.我不想嵌入Python解释器.谢谢!

Eli*_*ght 14

我推荐这里详述方法.它首先解释如何执行Python代码的字符串,然后从那里详细说明如何设置Python环境以与C程序交互,从C代码调用Python函数,从C代码处理Python对象等.

编辑:如果你真的想走IPC的路线,那么你会想要使用struct模块或更好的protlib.Python和C进程之间的大多数通信都围绕在套接字共享内存中来回传递结构.

我建议Command使用字段和代码创建一个结构来表示命令及其参数.不知道更多关于你想完成什么,我不能给更具体的建议,但总的来说,我建议protlib库,因为这是我用C和Python程序之间的通信(声明:我是protlib的作者) .

  • 我以前做过这个并且效果很好。我有几个 C 进程通过通过套接字发送结构进行通信,并且也希望允许 python 进程。在 python 中编写协议内容很简单,我能够编写一个 Python 脚本,该脚本作为构建的一部分运行,以自动创建 Python 代码,通过解析 .H 文件来打包/解包 C 结构。唯一的问题是由于所有字符串打包/解包,性能远不及直接作用于结构的二进制表示(仅 memcopy 并将原始数据从套接字转换)的本机 C 所获得的性能。 (2认同)

hha*_*fez 7

您是否考虑过将您的 Python 应用程序包装在一个 shell 脚本中并从您的 C 应用程序中调用它?

不是最优雅的解决方案,但它非常简单。


jan*_*neb 5

请参阅手册中的相关章节:http : //docs.python.org/extending/

本质上,您必须将python解释器嵌入程序中。