python导入模块方法 怎样在python程序中嵌入C程序片段?
怎样在python程序中嵌入C程序片段?
如果想在C/C中嵌入Python,相对简单。你需要的是添加Python 包含文件目录和lib文件目录到VC中。让 让我们看看如何在C/C中嵌入Python。
在VC6.0下,打开工具-gt选项-gt目录-gt显示目录,将Python安装目录下的inlude目录添加到inlude文件项,将libs目录添加到库文件项。
在VC2005下,打开工具-gtoptions-gt项目和解决方案-gtVC目录,然后做同样的工作。
代码如下:
在调试状态下执行时出错无法找到python 31 _ file "。后来发现debug下生成需要python31_ file,否则只能在release下生成。
一个
2
三
四
五
六
七
八
#包含ltpython.hgt
int main()
{
Py_Initialize()
PyRun _ SimpleString(打印hi,python!)
Py_Finalize()
返回0
}
Py_Initialize函数的原型是:void Py_Initialize()。
在C/C中嵌入Python时必须使用这个函数,它初始化Python解释器,必须在使用其他Python/C API之前调用。可以使用Py_IsInitialized函数来判断初始化是否成功,如果成功则返回True。
pyron _ simple string函数的原型是int pyron _ simple string(const char * command),用来执行一段Python代码。
注意:语句之间需要保持缩进吗?
Py_Finalize函数的原型是void Py_Finalize(),用来关闭Python解释器,释放解释器占用的资源。
PyRun _ SimpleFile函数可用于运行。脚本文件。该函数的原型如下:
int pyron _ simple FILE(FILE * FP,const char *filename)
其中fp是指向打开文件的指针,filename是要运行的python脚本的名称。但是因为这个功能是visual studio官方发布的。
编译,如果使用其他版本的编译器,FILe定义可能因版本而崩溃。同时,为了简单起见,可以用下面的方法代替这个函数:pyron _ simple string(execfile( ; ))//使用execfile运行python文件。
Py_BuildValue()用于将数字和字符串转换成Python中相应的数据类型(在C语言中,所有Python类型都声明为PyObject类型),函数原型如下:
Py object * Py _ build value(const char * format,…..)
PyString_String()用于将PyObject*类型的变量转换成C语言可以处理的char*类型。具体原型如下:
char * py String _ String(py object * p)
Python如何嵌入C/C 进行开发?
你说的是在C/C程序中调用Python。这很容易实现。只需要在头文件中引入Python.件,然后在编译时链接到Python库即可。下面我简单介绍一下。以Linux系统为例,感兴趣的朋友可以试试:
01安装python-devel插件首先安装python-devel插件,里面有C/C程序调用python的头文件和库文件,在编写和编译程序的时候会用到。安装时,只需输入命令 "yum install-y python-devel "直接在终端。默认情况下,安装Python2。如果需要安装Python3.x,运行命令 "yum install-y python "。
02C/C程序调用Python插件安装完成后,我们可以直接编写C/C程序调用Python。测试代码如下。这里我简单地输出一个Python语句。基本思路是先初始化,再调用Python,最后结束。整个过程非常简单易懂:
写入完成后,wq保存程序,然后运行命令 "gcc -lpython2.7测试在终端中(这里用你的C/C文件代替),程序就可以正常编译了。运行效果如下,符合预期:
当然也可以直接调用py文件(脚本),传入参数,得到返回结果。这里我简单地写了一个加法求和函数,输入两个参数,返回一个结果:
C/C调用代码如下。基本流程和之前一样。首先初始化,然后加载模块,调用函数,传入参数,最后得到执行结果。代码量多一点,但也不难理解。:
至此,我们已经完成了在C/C程序中对Python的调用。总的来说,整个过程很简单。只要你有一定的C/C基础,熟悉上面的例子和代码,很快就能掌握。Windows环境类似,也需要导入相应的头文件和库。网上也有相关教程和资料,非常详细。有兴趣的可以搜一下。希望以上分享的内容能对你有所帮助,也欢迎大家提出意见和评论进行补充。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。