1. /*
  2. *gcc -o callpy callpy.cpp -I/usr/include/python3.5 -lpython3.5m
  3. */
  4. #include <Python.h>
  5. #include<stdio.h>
  6. int main(int argc, char** argv)
  7. {
  8. // 初始化Python
  9. //在使用Python系统前,必须使用Py_Initialize对其
  10. //进行初始化。它会载入Python的内建模块并添加系统路
  11. //径到模块搜索路径中。这个函数没有返回值,检查系统
  12. //是否初始化成功需要使用Py_IsInitialized。
  13. Py_Initialize();
  14.  
  15. // 检查初始化是否成功
  16. if ( !Py_IsInitialized() ) {
  17. return -;
  18. }
  19. // 添加当前路径
  20. //把输入的字符串作为Python代码直接运行,返回0
  21. //表示成功,-1表示有错。大多时候错误都是因为字符串
  22. //中有语法错误。
  23. PyRun_SimpleString("import sys");
  24. // PyRun_SimpleString("print '---import sys---'");
  25. PyRun_SimpleString("sys.path.append('./')");
  26. PyObject *pName,*pModule,*pDict,*pFunc,*pArgs,*pvalue;
  27. // 载入名为pytest的脚本
  28. //pName = PyString_FromString("rege");
  29. pName = PyUnicode_FromFormat("rege");
  30. pModule = PyImport_Import(pName);
  31. if ( !pModule ) {
  32. printf("can't find rege.py");
  33. getchar();
  34. return -;
  35. }
  36. pDict = PyModule_GetDict(pModule);
  37. if ( !pDict ) {
  38. return -;
  39. }
  40.  
  41. // 找出函数名为add的函数
  42. printf("----------------------\n");
  43. pFunc = PyDict_GetItemString(pDict, "add");
  44. if ( !pFunc || !PyCallable_Check(pFunc) ) {
  45. printf("can't find function [add]");
  46. getchar();
  47. return -;
  48. }
  49.  
  50. // 参数进栈
  51. *pArgs;
  52. pArgs = PyTuple_New();
  53.  
  54. // PyObject* Py_BuildValue(char *format, ...)
  55. // 把C++的变量转换成一个Python对象。当需要从
  56. // C++传递变量到Python时,就会使用这个函数。此函数
  57. // 有点类似C的printf,但格式不同。常用的格式有
  58. // s 表示字符串,
  59. // i 表示整型变量,
  60. // f 表示浮点数,
  61. // O 表示一个Python对象。
  62.  
  63. // 调用Python函数
  64. pvalue= PyObject_CallObject(pFunc, pArgs);
  65.  
  66. //下面这段是查找函数foo 并执行foo
  67.  
  68. Py_DECREF(pName);
  69. Py_DECREF(pArgs);
  70. Py_DECREF(pModule);
  71.  
  72. // 关闭Python
  73. Py_Finalize();
  74. return ;
  75. }

linux c 调用 python的更多相关文章

  1. python - Linux C调用Python 函数

    1.Python脚本,名称为py_add.py def add(a=,b=): print('Function of python called!') print('a = ',a) print('b ...

  2. linux+php+apache web调用python脚本权限问题解决方案

    lamp : linux + apache + mysql + php 在上篇随笔中linux+php+apache调用python脚本时出现的问题的根本原因是:apache运行时使用的apache用 ...

  3. linux+php+apache web调用python脚本权限问题

    lamp : linux + apache + mysql + php 在近期项目中使用 linux + apache + php调用python脚本是出现以下权限问题: build/bdist.li ...

  4. 中标麒麟(linux)下Qt调用python

    转自:https://blog.csdn.net/lwlgzy/article/details/83857297 http://www.cnblogs.com/jiaping/p/6321859.ht ...

  5. [Python]linux自己定义Python脚本命令

    在window下写好的程序配置到Linux上,要实现随意文件夹下的命令调用. 因为初学Linux,这里从文件传输等最主要的方法入手,记录配置的过程中遇到的各种问题. 连接远端server 这里使用pu ...

  6. linux下安装python linux下一些常用的命令

    注意 ubuntukylin-14.04.2-desktop-amd64 自带python2.7.6 这个说的比较详细 http://wenku.baidu.com/link?url=gaeFcQrc ...

  7. R 调用 python

    上一篇说了python使用 rpy2 调用 R,这里介绍R如何调用python.R的强项在于统计方面,尤其是专业的统计分析,统计检验以及作图功能十分强大,但是在通用性方面,就远不如Python了,比如 ...

  8. java调用python的惨痛史(无法获取环境变量)

    环境:java,was,python2.6,红帽linux,oracle,python用cx_Oracle        事情是这样的,有个需求,需要对数据库进行处理,简单说就是把数据取出来,用pyt ...

  9. Linux下升级Python到3.5.2版本

    原文出处:https://www.cnblogs.com/tssc/p/7762998.html 本文主要介绍在Linux(CentOS)下将Python的版本升级为3.5.2的方法 众所周知,在20 ...

随机推荐

  1. TP多条件查询实例

    where条件查询,时间范围查询 $condition = [ ['member_id', '=', $member_id] ]; if($type) { $condition[] = ['type' ...

  2. SDN(Software Defined Network):软件定义网络----转载

    SDN(Software Defined Network):软件定义网络 传统的网络转发行为: 1)逐设备单独控制,纯分布式控制. 2)控制面和转发面在同一个设备中,耦合紧密. 管理员无法直接操控转发 ...

  3. SASS - 函数

    SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – 语法 SASS – 变量 SASS- 局部文件(Partial) SASS – 混合(Mixin) SASS ...

  4. vue移动端点击一个元素缩小,松手的时候元素恢复正常

    active伪类解决 HTML代码 <div class='box'> </div> CSS代码 .box { width: 100px; height: 100px; bac ...

  5. 启动运行python3时 UnicodeDecodeError: 'gbk' codec can't decode byte 0xa2 in position 170: illegal multibyte sequence

    重现 在cmd中输入Python,运行后,出现以下错误: Python 3.7.3 (default, Mar 27 2019, 17:13:21) [MSC v.1915 64 bit (AMD64 ...

  6. HashMap核心功能源码浅析

    1.引子 "HashMap"由“hash”和“map"两个单词组成,这里的”map"表示“映射”而不是“地图”的意思,两个单词连起来就是“哈希映射表”.Map是 ...

  7. cf1208 E Let Them Slide(差分+RMQ\单调队列)

    题意 如题目的图所示,每行都可以左右移动,但是数字不允许断开,且不许越界(宽度为w). 单独求每一列的最大的和为多少. 思路 对于每一列来说,在每一行上都有一个可以取到的区间, 所以,对于一列来说,答 ...

  8. POJ - 3661 Running(dp---背包)

    题意:Bessie要运动N分钟,已知每一分钟可以跑的距离,每一分钟可选择跑或者不跑,若选择跑,疲劳度加1,但疲劳度不能超过M:若选择不跑,则每过一分钟,疲劳度减1,且只有当疲劳度减为0时可以继续跑.求 ...

  9. 吴裕雄--天生自然 JAVASCRIPT开发学习: 闭包

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. 寒假day08

    今天爬了部分与人才动态相关的数据,还刷了剑指offer的部分算法题