• 技术文章 >常见问题 >Python常见问题

    c调用python怎么释放

    yangyang2020-04-29 15:44:40原创3187

    c调用Python的步骤:

    1、设置编译环境,其实就是设置Python的头文件和库文件目录

    2、初始化Python解释器:

    1

    Py_Initialize();

    3、调用Python

    4、释放资源

    1

    Py_Finalize();

    实例:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    /*

    module:    Python脚步的模块名

    function:  要调用的函数名

    format:    传递给Py_VaBuildValue函数的可变参数模板

    */

    int PyCall( const char * module, const char * function, const char *format, ... )

    {

     PyObject* pMod    = NULL;

     PyObject* pFunc   = NULL;

     PyObject* pParm   = NULL;

     PyObject* pRetVal = NULL;

     

     //导入模块

     if( !(pMod = PyImport_ImportModule(module) ) ){

      return -1;

     }

     //查找函数

     if( !(pFunc = PyObject_GetAttrString(pMod, function) ) ){

      return -2;

     }

     

     //创建参数

     va_list vargs;

     va_start( vargs, format );

     pParm = Py_VaBuildValue( format, vargs );

     va_end(vargs);

     

     //函数调用

     pRetVal = PyEval_CallObject( pFunc, pParm);

      

     //假定返回值为整形

     int ret;

     PyArg_Parse( pRetVal, "i", &ret );

     return ret;

    }

     

    int main(int argc, char* argv[])

    {

     Py_Initialize();

     

     /* 这做个简单的说明

     ** format参数用()扩起来是表示元组的意思。元组中的个数对应Python脚本中的参数。

     ** 因为fun,fun1,fun2函数的参数个数分别是 0,1,2,所以,元组中的个数必须为0,1,2,不然调用将失

     ** 败。当然,元组中的每个元素都是可以为任意的类型,比如:

     **     PyCall( "pytest", "fun2", "( i,{s:s,s:s})", 2, "name", "linxr", "age", "25" );

     */

     printf( "ret = %d\n", PyCall( "pytest", "fun""()" );

     printf( "ret = %d\n", PyCall( "pytest", "fun1", "(i)",  12 );

     printf( "ret = %d\n", PyCall( "pytest", "fun2", "(is)", 12, "12" );

     

     Py_Finalize();

     

     return 0;

    }

    更多Python知识请关注Python视频教程栏目。

    专题推荐:python
    上一篇:python sklearn找不到指定模块 下一篇:python-minimal是什么

    相关文章推荐

    • 怎么判断Python数字中的偶数• 使用nohup运行python报错• python如何执行dos命令

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网