C调用Python函数相关代码示例剖析
2010-03-19 17:04
851 查看
C调用Python函数的相关操作将会在这篇文章中通过一段代码示例来为大
家详细介绍。初学者们可以通过这里介绍的内容充分掌握这一应用技巧。
我们在使用C语言的时候,有时会遇到需要调用Python
函数来完成一些特
定的功能。那么接下来,我们将会在这里为大家详细介绍一下C调用Python函数的相关操作方法,希望可以给大家带来一些帮助。
Python脚本,存为pytest.py
C调用Python函数的代码示例:
以上就是我们对C调用Python函数的相关操作方法的介绍。
#include <Python.h>
#include <stdio.h>
void test( void
)
{
PyObject *pMod = NULL;
PyObject *pFun =
NULL;
PyObject *pParm = NULL;
PyObject *pRetVal = NULL;
int iRetval = 0;
if ( pMod = PyImport_ImportModule( "add" )
)
{
if ( pFun = PyObject_GetAttrString( pMod, "add" )
)
{
pParm = PyTuple_New( 2 );
PyTuple_SetItem( pParm, 0, Py_BuildValue( "i", 300 ) );
PyTuple_SetItem( pParm, 1, Py_BuildValue( "i", 500 ) );
pRetVal = PyEval_CallObject( pFun, pParm );
PyArg_Parse(
pRetVal, "i", &iRetval );
printf( "result: %d/n",
iRetval );
}
else
printf( "Not
found fun!/n" );
}
else
printf( "Not found
module!/n" );
}
int main( void )
{
Py_Initialize();
&n
......
Ubuntu下首先要配置下环境;sudo apt-get install python-dev
以下是一个简单的例子:
#include "/usr/include/python2.5/Python.h"
#include <stdio.h>
int main(int arg,char **argv){
PyObject *modelname,*model,*dict,*func,*args;
char *name="os";//模块名
//初始化Python
Py_Initialize();
if (!Py_IsInitialized()){
printf("初始化失败/n");
return -1;
}
//直接运行Python语句
PyRun_SimpleString("print '初始化成功'");
//导入Python模块
modelname=PyString_FromString(name);
model=PyImport_Import(modelname);
if (model){
printf("Load model ok/n");
}
else{
printf("Model %s not found!/n",name);
return -1;
}
dict=PyModule_GetDict(model);
if(!dict){
printf("获取字典失败/n");
return -1;
}
else{
printf("获取字典成功/n");
}
//从模块中找到“System”函数
func=PyDict_GetItemString(dict,"system");
if(!func || !PyCallable_Check(func)){
printf("函数无效/n");
return -1;
}
args=PyTuple_New(1);
PyTuple_SetItem(args,0,Py_BuildValue("s","ls"));//l=long,s=string...
//调用函数
PyObject_CallObject(func,args);
Py_DECREF(modelname);
Py_DECREF(model);
Py_DECREF(func);
Py_DECREF(args);
Py_DECREF(dict);
//垃圾回收
Py_Finalize();
return 0;
}
下面就是编译连接生成可执行文件。
下面是用Python写的编译脚本。
#!/usr/bin/env python
import os
import sys
f=raw_input("C/C++ File:");
out=raw_input("Output file:");
sys.stdout.write("Trying to Complie C File using gcc.../n");
sys.stdout.write("---------------------------------------------------------/n");
if out=='' or out==None:
os.system("gcc "+f +" -L/usr/lib/python2.5/config -lpython2.5
-lpthread -lm -ldl -lutil");
else:
os.system("gcc "+f +" -L/usr/lib/python2.5/config -lpython2.5
-lpthread -lm -ldl -lutil "+"-o "+out);
sys.stdout.write("---------------------------------------------------------/n");
sys.stdout.write("Done!/n");
家详细介绍。初学者们可以通过这里介绍的内容充分掌握这一应用技巧。
我们在使用C语言的时候,有时会遇到需要调用Python
函数来完成一些特
定的功能。那么接下来,我们将会在这里为大家详细介绍一下C调用Python函数的相关操作方法,希望可以给大家带来一些帮助。
Python脚本,存为pytest.py
def add(a,b): print "in python function add" print " a = " + str(a) print " b = " + str(b) print " ret = " + str(a+b) return a + b
C调用Python函数的代码示例:
#include < stdio.h > #include < stdlib.h > #include "C:/Python26/include/python.h" #pragma comment(lib, "C://Python26//libs//python26.lib") int main(int argc, char** argv) { // 初始化Python //在使用Python系统前,必须使用Py_Initialize对其 //进行初始化。它会载入Python的内建模块并添加系统路 //径到模块搜索路径中。这个函数没有返回值,检查系统 //是否初始化成功需要使用Py_IsInitialized。 PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pRetVal; Py_Initialize(); // 检查初始化是否成功 if ( !Py_IsInitialized() ) { return -1; } // 载入名为pytest的脚本(注意:不是pytest.py) pName = PyString_FromString ("pytest"); pModule = PyImport_Import (pName); if ( !pModule ) { printf("can't find pytest.py"); getchar(); return -1; } pDict = PyModule_GetDict (pModule); if ( !pDict ) { return -1; } // 找出函数名为add的函数 pFunc = PyDict_GetItemString (pDict, "add"); if ( !pFunc || !PyCallable_Check(pFunc) ) { printf("can't find function [add]"); getchar(); return -1; } // 参数进栈 pArgs = PyTuple_New (2); // PyObject* Py_BuildValue(char *format, ...) // 把C++的变量转换成一个Python对象。当需要从 // C++传递变量到Python时,就会使用这个函数。此函数 // 有点类似C的printf,但格式不同。常用的格式有 // s 表示字符串, // i 表示整型变量, // f 表示浮点数, // O 表示一个Python对象。 PyTuple_SetItem(pArgs, 0, Py_BuildValue("l",3)); PyTuple_SetItem(pArgs, 1, Py_BuildValue("l",4)); // 调用Python函数 pRetVal = PyObject_CallObject (pFunc, pArgs); printf("function return value : %ld/r/n", PyInt_AsLong(pRetVal)); Py_DECREF(pName); Py_DECREF(pArgs); Py_DECREF(pModule); Py_DECREF(pRetVal); // 关闭Python Py_Finalize(); return 0; } //一下为个人实践的另一套方法 #include < Python.h > #include < conio.h > int main() { Py_Initialize(); if (!Py_IsInitialized()) { printf("初始化错误/n"); return -1; } PyObject* pModule = NULL ; PyObject* pFunc = NULL ; PyObject* pArg = NULL ; PyObject* pRetVal = NULL ; pModule = PyImport_ImportModule ("hello"); pFunc = PyObject_GetAttrString (pModule,"hello"); pArg = Py_BuildValue ("(i,i)",33,44); pRetVal = PyObject_CallObject (pFunc,pArg); printf("%d/n",PyInt_AsLong(pRetVal)); Py_Finalize(); _getch(); return 0; }
以上就是我们对C调用Python函数的相关操作方法的介绍。
#include <Python.h>
#include <stdio.h>
void test( void
)
{
PyObject *pMod = NULL;
PyObject *pFun =
NULL;
PyObject *pParm = NULL;
PyObject *pRetVal = NULL;
int iRetval = 0;
if ( pMod = PyImport_ImportModule( "add" )
)
{
if ( pFun = PyObject_GetAttrString( pMod, "add" )
)
{
pParm = PyTuple_New( 2 );
PyTuple_SetItem( pParm, 0, Py_BuildValue( "i", 300 ) );
PyTuple_SetItem( pParm, 1, Py_BuildValue( "i", 500 ) );
pRetVal = PyEval_CallObject( pFun, pParm );
PyArg_Parse(
pRetVal, "i", &iRetval );
printf( "result: %d/n",
iRetval );
}
else
printf( "Not
found fun!/n" );
}
else
printf( "Not found
module!/n" );
}
int main( void )
{
Py_Initialize();
&n
......
Ubuntu下首先要配置下环境;sudo apt-get install python-dev
以下是一个简单的例子:
#include "/usr/include/python2.5/Python.h"
#include <stdio.h>
int main(int arg,char **argv){
PyObject *modelname,*model,*dict,*func,*args;
char *name="os";//模块名
//初始化Python
Py_Initialize();
if (!Py_IsInitialized()){
printf("初始化失败/n");
return -1;
}
//直接运行Python语句
PyRun_SimpleString("print '初始化成功'");
//导入Python模块
modelname=PyString_FromString(name);
model=PyImport_Import(modelname);
if (model){
printf("Load model ok/n");
}
else{
printf("Model %s not found!/n",name);
return -1;
}
dict=PyModule_GetDict(model);
if(!dict){
printf("获取字典失败/n");
return -1;
}
else{
printf("获取字典成功/n");
}
//从模块中找到“System”函数
func=PyDict_GetItemString(dict,"system");
if(!func || !PyCallable_Check(func)){
printf("函数无效/n");
return -1;
}
args=PyTuple_New(1);
PyTuple_SetItem(args,0,Py_BuildValue("s","ls"));//l=long,s=string...
//调用函数
PyObject_CallObject(func,args);
Py_DECREF(modelname);
Py_DECREF(model);
Py_DECREF(func);
Py_DECREF(args);
Py_DECREF(dict);
//垃圾回收
Py_Finalize();
return 0;
}
下面就是编译连接生成可执行文件。
下面是用Python写的编译脚本。
#!/usr/bin/env python
import os
import sys
f=raw_input("C/C++ File:");
out=raw_input("Output file:");
sys.stdout.write("Trying to Complie C File using gcc.../n");
sys.stdout.write("---------------------------------------------------------/n");
if out=='' or out==None:
os.system("gcc "+f +" -L/usr/lib/python2.5/config -lpython2.5
-lpthread -lm -ldl -lutil");
else:
os.system("gcc "+f +" -L/usr/lib/python2.5/config -lpython2.5
-lpthread -lm -ldl -lutil "+"-o "+out);
sys.stdout.write("---------------------------------------------------------/n");
sys.stdout.write("Done!/n");
相关文章推荐
- C调用Python函数相关代码示例剖析
- Python3基础 创建一个模块 导入并调用其中的函数 主代码与模块代码在同一文件夹下
- 使用C#调用存储过程,用函数合理组织代码,使程序更加的清晰(示例)
- Python常见文件操作的函数示例代码
- linux平台下C语言调用python代码示例
- WordPress文章作者的相关函数调用代码
- python调用Delphi写的Dll代码示例
- MIT Python 第四课函数抽象与递归简介 函数调用与原代码的区别
- 飘逸的python - 几行代码实现unix管道风格的函数调用
- Python脚本调用C#代码数据交互示例(hello world)
- Python常见文件操作的函数示例代码
- python中利用Future对象回调别的函数示例代码
- Python 3.X 调用多线程C模块,并在C模块中回调python函数的示例
- python3:调用阿里云小蜜代码示例
- WordPress作者的相关函数调用代码
- 详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
- win10 + VS2013下载directshow相关示例代码及directshow库文件调用
- wordpress作者的相关函数调用代码
- Python 实现异步调用函数的示例讲解
- Python常见文件操作的函数示例代码