当前位置:   article > 正文

C语言调用python

C语言调用python

1、linux中安装libpython3.10-dev     

        通过C语言调用python代码,需要先安装libpython3的dev依赖库(不同的ubuntu版本下,python版本可能会有差异, 比如ubuntu 22.04里是libpython3.10-dev)。

        首先可以通过以下命令验证是否是否已经存在python3dev包:

dpkg -l | grep libpython3 | grep dev

        如果已经安装,则会出现以下界面:

        如果没有,则输入以下指令进行安装:

  1. sudo apt-get update
  2. sudo apt install libpython3.10-dev

2、直接调用python语句

  1. #include "Python.h"
  2. int main()
  3. {
  4. Py_Initialize(); // 初始化
  5. PyRun_SimpleString("print ('funny')");
  6. Py_Finalize(); //释放资源
  7. }

        编译、运行

  1. gcc simpledemo.c -o simpledemo -I /usr/include/python3.10 -l python3.10
  2. //-I 指定解释器的路径 -l 指定解释器的版本
  3. ./simpledemo

3、调用无参python函数

  1. #if 0
  2. 1、包含Python.h头文件,以便使用Python API。
  3. 2、使用void Py_Initialize()初始化Python解释器,
  4. 3、使用PyObject *PyImport_ImportModule(const char *name)和PyObject
  5. *PyObject_GetAttrString(PyObject *o, const char *attr_name)获取sys.path对象,并利用
  6. int PyList_Append(PyObject *list, PyObject *item)将当前路径.添加到sys.path中,以便加载
  7. 当前的Python模块(Python文件即python模块)
  8. 4、使用PyObject *PyImport_ImportModule(const char *name)函数导入Python模块,并检查是否
  9. 有错误。
  10. 5、使用PyObject *PyObject_GetAttrString(PyObject *o, const char *attr_name)函数获取
  11. Python函数对象,并检查是否可调用。
  12. 6、使用PyObject *PyObject_CallObject(PyObject *callable, PyObject *args)函数调用
  13. Python函数,并获取返回值。
  14. 7、使用void Py_DECREF(PyObject *o)函数释放所有引用的Python对象。
  15. 8、结束时调用void Py_Finalize()函数关闭Python解释器。
  16. 相关的函数参数说明参考网站(网站左上角输入函数名即可开始搜索):
  17. https://docs.python.org/zh-cn/3/c-api/import.html
  18. #endif

        编译 

gcc -o nopara nopara.c -I /usr/include/python3.10 -l python3.10

4、调用有参python函数

  1. #if 0
  2. 1、包含Python.h头文件,以便使用Python API。
  3. 2、使用void Py_Initialize()初始化Python解释器,
  4. 3、使用PyObject *PyImport_ImportModule(const char *name)和PyObject
  5. *PyObject_GetAttrString(PyObject *o, const char *attr_name)获取sys.path对象,并利用
  6. int PyList_Append(PyObject *list, PyObject *item)将当前路径.添加到sys.path中,以便加载
  7. 当前的Python模块(Python文件即python模块)
  8. 4、使用PyObject *PyImport_ImportModule(const char *name)函数导入Python模块,并检查是否
  9. 有错误。
  10. 5、使用PyObject *PyObject_GetAttrString(PyObject *o, const char *attr_name)函数获取
  11. Python函数对象,并检查是否可调用。
  12. 6、使用PyObject *Py_BuildValue(const char *format, ...)函数将C类型的数据结构转换成
  13. Python对象,作为Python函数的参数,没有参数不需要调用
  14. 7、使用PyObject *PyObject_CallObject(PyObject *callable, PyObject *args)函数调用
  15. Python函数,并获取返回值。
  16. 8、使用int PyArg_Parse(PyObject *args, const char *format, ...)函数将返回值转换为C类
  17. 型,并检查是否有错误,没有返回值时不需要调用。
  18. 9、使用void Py_DECREF(PyObject *o)函数释放所有引用的Python对象。
  19. 10、结束时调用void Py_Finalize()函数关闭Python解释器。
  20. 相关的函数参数说明参考网站(网站左上角输入函数名即可开始搜索):
  21. https://docs.python.org/zh-cn/3/c-api/import.html
  22. #endif

        C对应的Python的数据类型转换对应的格式

Format CodePython TypeC/C++ Type
sstrchar*
zstr/Nonechar*/NULL
iintint
llonglong
cstrchar
dfloatdouble
DcomplexPy_Complex*
O(any)Pyobject*
SstrPyStringObject

        编译

gcc para.c -o para -I /usr/include/python3.10 -l python3.10

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/778040
推荐阅读
相关标签
  

闽ICP备14008679号