c语言中python函数 c语言 c++ python

如何在C语言中调用python函数C语言不能直接调用Python源程序,但是可以通过进程调用来实现 。
C语言程序如何调用python程序下面是一个例子:
首先是python的一个简单函数
class Hello:
def __init__(self, x):
self.a = x
def print(self, x=None):
print(x)
def xprint():
print("hello world")
if __name__ == "__main__":
xprint()
h = Hello(5)
h.print()1
下面是C语言
#include python3.4m/Python.h
#include stdio.h
#include stdlib.h
#include string.h
int main()
{
Py_Initialize();
// 将当前目录加入sys.path
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
// 导入hello.py模块
PyObject *pmodule = PyImport_ImportModule("hello");
// 获得函数xprint对象,并调用,输出“hello world\n”
PyObject *pfunc = PyObject_GetAttrString(pmodule, "xprint");
PyObject_CallFunction(pfunc, NULL);
// 获得类Hello并生成实例pinstance,并调用print成员函数,输出“5 6\n”
PyObject *pclass= PyObject_GetAttrString(pmodule, "Hello");
PyObject *arg= Py_BuildValue("(i)", 5);
PyObject *pinstance = PyObject_Call(pclass, arg, NULL);
PyObject_CallMethod(pinstance, "print", "i", 6);
Py_Finalize();
return 0;
}
编译命令如下:
gcc pyapi.c -lpython3.4m -o pyapi
怎样把Python代码嵌入到C程序步骤1:安装Python开发包
由于需要访问Python/C API,首先安装Python开发包 。
在Debian,Ubuntu或Linux Mint中:
在CentOS , Fedora或RHEL中:
安装成功后,Python头文件在/usr/include/python2.7 。根据Linux发行版的不同,确切的路径可能是不相同的 。例如,CentOS 6中是/usr/include/python2.6 。
步骤2:初始化解释器并设置路径
C中嵌入Python的第一步是初始化Python解释器,这可以用以下C函数完成 。
初始化解释器后 , 需要设置你的C程序中要导入的Python模块的路径 。例如,比如你的Python模块位于/usr/local/modules 。然后使用以下C函数调用来设置路径 。
步骤3:数据转换
C中嵌入Python最重要的方面之一是数据转换 。从C中传递数据到Python函数 , 需要首先将数据从C数据类型转换到Python数据类型 。Python/C API提供各种函数来实现这 。例如,转换C字符串到Python字符串 , 使用PyString_FromString函数 。
另外一个类似函数PyInt_FromLong , 将C中long数据类型转换为Python int 。每个Python/C API函数返回一个PyObject类型的引用 。
步骤4:定义一个Python模块
当你想嵌入Python代码到另一种语言如C,该代码需要被写成Python模块,然后用另一种语言“导入” 。所以让我们来看看如何在C中导入Python模块 。
为了进行说明 , 我们实现一个简单的Python模块例子如下:
以上的Python函数有一个字符串作为参数并返回两个重复的字符串 。例如,如果输入字符串是“cyberpersons”,该函数返回'cyberpersonscyberpersons' 。此模块文件命名为“printData.py”并将它放在前面声明的Python模块目录中(/usr/local/modules) 。
步骤5:加载一个Python模块
现在你已经定义了Python模块,是时候在C程序中加载它了 。导入模块的C代码看起来像这样:
步骤6:构建函数的参数
当加载一个模块时,可以调用模块中定义的Python函数 。通常,我们需要传递一个或多个参数到一个Python函数 。我们必须构建一个Python元组对象,它包括Python函数中的参数 。
在我们的例子中,printData函数定义带一个参数的模块 。因此,我们构建一个大小是一的Python元组对象如下 。我们可以使用PyTuple_SetItem设置元组对象的每个项 。

推荐阅读