C语言中嵌入Python

在C语言中嵌入Python 在某些情况下,我们可能需要在C语言程序中嵌入Python代码,以利用Python的灵活性和丰富的库来完成特定的任务。除了执行简单的Python代码,我们还可以在C语言程序中嵌入更复杂的Python代码,并在C和Python之间传递数据。总结起来,通过使用Python的C API,我们可以在C语言程序中嵌入Python代码,并在两种语言之间进行数据交换。Python的C API允许我们通过C代码调用Python解释器,并在C程序中执行Python代码。函数调用Python函数,并将返回值存储在。 阅读详情
1.为什么要嵌入python?
这个问题问的好,一般静态语言与脚本语言(不仅仅是python),相互搭配,有两种方式,一种是用c语言写好模块,然后用python去整合,也被称之为扩展python,这样的好处是即有python的灵活性,又有c语言的效率,还有一种就是c语言嵌入python,这样我们就有了一个python解释器了,在游戏编程中常用这种方法,如果你是用静态语言编程,那么修改一些属性,就意为着重新编译,如果程序很大的话,编译是一间令人很烦的事,编译起来非常慢,一种好的设计是把一些属性写在一个初始化文件中,然后在程序中去解析这个属性文件,不过这样还是不够灵活,更加灵活的方式,就是干脆嵌入python(游戏编程中常用lua),这样,游戏更有创造性,更容易扩展。


       2.一个"错误的"例子

下面先把C代码写出来,(当然,直接编译肯定是错的,因为我们还有许多东西没设置)

main.c

  1. <SPAN style="FONT-SIZE: 14px">  
  2. #include <Python.h>   
  3. int main()  
  4. {  
  5.   
  6. Py_Initialize();  
  7. PyRun_SimpleString("print 'hello,python!'");  
  8. Py_Finalize();  
  9.   
  10. return 0;  
  11. }</SPAN>  
  12.    

#include <Python.h>
int main()
{

Py_Initialize();
PyRun_SimpleString("print 'hello,python!'");
Py_Finalize();

return 0;
}
 

        Py_Initialize()和Py_Finalize()就是初始化和结束python解释器,PyRun_SimpleString()就在运行一段python语句,(好像表达式不行...)

你一定觉得你没有Python.h这个头文件,所以你不得不安装一个叫python-dev的东西,直接sudo apt-get python-dev好了
现在我们试着编译一下,
gcc -o main.c main
编译错误,它找不到Python.h,它当然找不到,我们虽然已经下载安装了,但是gcc并不能找到,我们需要告诉它,这就要用到gcc 的 -I选项
"-I 在头文件的搜索路径列表中添加dir目录。" --- man 关于gcc -I选项的说明
我们继续尝试编译:
gcc -I/usr/include/python2.6 main.c -o main
然后你会看到一大堆的错误
undefined reference to
恩,链接错误,他们并没有找到库的实现
你需要这样编译
gcc -I/usr/include/python2.6 -lpython2.6 main.c -o main
这次就没问题了。


        实际上我们更常见的做法是写一个python模块,然后导入,调用它,
看这个代码:
Test.py


  1. <SPAN style="FONT-SIZE: 14px">  
  2. def hello():  
  3.     print "nihao"  
  4.   
  5. </SPAN>  

def hello():
    print "nihao"

main.c

  1. <SPAN style="FONT-SIZE: 14px">  
  2. #include <Python.h>   
  3. #include <stdio.h>   
  4. int main()  
  5. {  
  6.     Py_Initialize();  
  7.   
  8.     PyObject *pModule = NULL;  
  9.     PyObject *pFunc   = NULL;  
  10.   
  11.     pModule = PyImport_ImportModule("Test");  
  12.     pFunc   = PyObject_GetAttrString(pModule, "hello");   
  13.     PyEval_CallObject(pFunc,NULL);  
  14.     Py_Finalize();  
  15.   
  16.     return 0;  
  17. }</SPAN>  
  18.    

#include <Python.h>
#include <stdio.h>
int main()
{
    Py_Initialize();

    PyObject *pModule = NULL;
    PyObject *pFunc   = NULL;

    pModule = PyImport_ImportModule("Test");
    pFunc   = PyObject_GetAttrString(pModule, "hello"); 
    PyEval_CallObject(pFunc,NULL);
    Py_Finalize();

    return 0;
}
 


      将这两个文件放在同一文件夹中,你尝试编译。
gcc -I/usr/include/python2.6 -lpython2.6 main.c -o main
看似无误,但是当你运行的时候,你发现报错,---- 段错误。
这是从网上找到的代码,我也深受其害....
之所以这样,原因之一是这段代码写的很糟,没有任何的异常处理,就连暴力的打印方式都没有,如果你这样写:

  1. <SPAN style="FONT-SIZE: 18px"><SPAN style="FONT-SIZE: 14px">  
  2. if (pModule == NULL)  
  3. {  
  4.     printf("the pModule is NULL\n");  
  5. }  
  6. </SPAN> </SPAN>  

if (pModule == NULL)
{
    printf("the pModule is NULL\n");
}
 

这样你就会明白pModule是空的,我们根本没能导入,因为python解释器没有找到它,
即使它在当前目录(什么?当前目录也找不到,恩,没错,我的下一篇博客,会给你解释其原因。)

在 Py_Initialize();后,插入这两行代码,把当前目录添加进来。

  1. <SPAN style="FONT-SIZE: 14px">  
  2. PyRun_SimpleString("import sys");  
  3. PyRun_SimpleString("sys.path.append('./')");  
  4.  </SPAN>  

PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
 

这样就没问题了。在编译一次。
运行

nihao
....
想要了解更多,更详细的用法,去啄木鸟社区吧。
终
作者:aiqier
csdn博客:http://blog.youkuaiyun.com/aiqier627

C语言嵌入Python编程 在上面的示例中,我们假设存在一个名为"mymodule"的Python模块,并且该模块中有一个名为"myfunction"的函数,它接受一个整数参数并返回一个整数结果。这种技术结合了C语言的高效性和Python的灵活性,允许我们利用Python的丰富库和功能来扩展我们的C程序。在上面的示例中,我们首先导入了名为"mymodule"的Python模块,然后获取了模块中名为"myfunction"的函数。通过以上步骤,我们可以在C语言中嵌入Python,并利用Python的强大功能来扩展我们的C程序。 阅读详情

相关推荐

Python嵌入技术:C语言与Python的跨界融合

本文深入探讨了如何在C语言中嵌入Python解释器,实现两种编程语言的优势互补。通过编译和运行C程序与Python代码的结合,展示了嵌入式Python代码的实际执行过程和输出结果。文章还强调了嵌入Python在实际软件开发中的应用价值,如创建动态和功能丰富的软件,并简要介绍了领域特定语言(DSLs)在Python中的应用。最后,文章通过书籍作者的感谢和呼吁,强调了读者反馈的重要性,并介绍了CompreQuest系列书籍,倡导读者加入ICT领域的卓越社区。

weixin_36078669的博客 415

如何在C语言中嵌入python代码并编译运行

本文记录如何在C语言中嵌入python代码并编译运行的步骤,及编译时遇到的一些问题。

BiigPanda的博客 1694

嵌入式web服务器boa_C语言/Python + HTML + javascript + ajax 代码实例例子

在嵌入式web服务器boa框架的基础上, 使用C语言cgi, 或者Python脚本, 结合HTML + javascript + ajax 的嵌入式web系统的开发实例 html 中使用javascritp + ajax 从C语言生成的cgi文件的get, set 一些值. boa服务器的相关配置参数说明: http://www.cnblogs.com/liuweiqiang/p/3859130.html boa安装包文件名: boa-for-hi3516a.tar.gz boa.conf 文件的保存路径: cat /etc/boa/boa.conf boa可 执行文件的路径: /usr/local/bin/boa, 可以设置为: 系统启动的时候, 这个进程自动启动 boa.conf 文件的重要参数 保存html文件的目录 DocumentRoot /www 可以将这个目录, 设置为samb共享文件夹的目录, 方便修改调试 修改完成以后, 肯定要重启boa进程的 保存python脚本, 或者C语言cgi文件的目录 ScriptAlias /cgi-bin/ /var/www/cgi-bin/ 说明: cgi-bin/ 后面的斜杠, 一定要加上 可以将这个目录, 设置为samb共享文件夹的目录, 方便修改调试 修改完成以后, 肯定要重启boa进程的 html文件文件中, 调用python脚本的时候, 指定的路径, 需要有: /cgi-bin, 比如: var url = "/cgi-bin/getuser.py"; 这个是python 或者 var url = "/cgi-bin/output.cgi"; 这个是C语言 说明: 如果发现, html文件, 修改了, 可是在浏览器中, 查看html源代码的时候, 这个代码, 还是旧的, 那么可以通过清空"IE浏览器", "360浏览器"的浏览记录 以上, javascript 可以调用python 同样, 也可以调用C语言生成的cgi文件(其实, 就是可执行文件) C语言 + Html 例子 C语言 CGI实例 http://blog.youkuaiyun.com/ajrm0925/article/details/8810342 http://blog.youkuaiyun.com/liang890319/article/details/6277900 http://blog.youkuaiyun.com/gnefniu/article/details/42432657 上传文件: http://blog.youkuaiyun.com/yu_xiang/article/details/7996670 查找文件 find . -type f -name "boa.conf" -print -mount find . -type f -name "boa" -print -mount 四、嵌入式web服务器boa的配置和使用 嵌入式web服务器boa的配置文件为boa.conf, 在boa-0.94.13目录下面,复制该文件到文件 系统的/etc/boa目录下面,打开boa.conf,修改为如下内容: Port 80 User root Group root ErrorLog /dev/console AccessLog /dev/null ServerName SoftEmbed.com DocumentRoot /www DirectoryIndex index.html KeepAliveMax 1000 KeepAliveTimeout 10 MimeTypes /etc/mime.types DefaultType text/plain CGIPath /bin:/usr/bin:/usr/local/bin ScriptAlias /cgi-bin/ /www/cgi-bin/ 几个重要配置参数如下: DocumentRoot: 存放html文档的主目录; DirectoryIndex: 默认返回的html文档; ScriptAlias:cgi脚本虚拟路径对应的实际路径,/www/cgi-bin/为cgi脚本存放的实际路径; 其他配置选项的意义请参考相关资料。 复制boa可执行文件到/usr/sbin目录中, 启动boa进程 重新制作文件系统,系统启动后,在客户端浏览器上输入开发板的ip 地址,例如: http://192.168.0.218, 就可以看到显示的测试网页了,如下图所示 CGI getenv函数的参数详解: http://www.cnblogs.com/ser0632/p/5498228.html s = getenv("环境变量名"); 取得环境变量内容 putenv改变或增加环境变量 int putenv(const char * string); setenv(改变或增加环境变量) http://www.jb51.net/article/71940.htm

c项目中如何嵌入python代码

在 C 项目中嵌入 Python 代码可以使用 Python/C API。Python/C API 提供了一组 C 函数,允许 C 程序调用 Python 模块并访问 Python 对象。 首先需要在 C 程序中包含 Python 头文件,并使用 Py_Initialize() 函数初始化 Python 解释器。然后,可以使用 PyImport_ImportModule() 函数导入 Python...

weixin_35749796的博客 465

Z-Image Turbo LoRA训练全流程:从数据标注到模型部署的保姆级指南(附ai-toolkit配置)

本文提供了一份详尽的Z-Image Turbo LoRA模型训练全流程指南,涵盖从数据准备、智能标注、参数调优到最终模型部署与Z-Image集成的每个环节。重点解析了使用ai-toolkit训练整合包进行高效训练的核心技巧与避坑方法,旨在帮助用户稳定训练出高质量的专属角色模型。

weixin_29088655的博客 963

Verilator+VSCode实战:5分钟搞定Verilog语法检查与波形调试

本文详细介绍了如何将Verilator仿真器与VSCode编辑器高效集成,打造极速的Verilog开发工作流。通过环境配置、实时语法检查、一键仿真与波形生成等实战技巧,帮助IC设计工程师在几分钟内完成从代码编写到波形调试的全过程,大幅提升中小规模模块的验证效率。

weixin_28454475的博客 470

Python 嵌入 C/C++ 应用程序全攻略

本文围绕在 C/C++ 应用程序中嵌入 Python 展开,详细阐述了嵌入 Python 的基础概念、初始化与终止流程、Python 解释器的使用方法、模块和对象的操作、错误处理与异常捕获等内容。同时,着重加入了 Python C 扩展模块调试过程的详细步骤,提供了丰富的代码示例和实用技巧,帮助开发者全面掌握在 C/C++ 中嵌入 Python 的技术以及调试扩展模块的方法,实现更强大的应用程序功能。

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 1549

视频生成工具本地部署完全指南:Seedance能装吗?有哪些开源替代?

本文系统介绍了视频生成模型的本地部署方案,分为三个部分:1)Seedance 2.0的混合部署模式,其开源组件可本地集成但核心功能需调用API;2)完全开源替代方案对比,包括LTX-2、Wan 2.1等模型的硬件需求与特点;3)详细部署指南,以ComfyUI+Wan 2.1为例,涵盖软件准备、模型整合、参数调优等步骤,并提供了显存优化和多GPU配置技巧。文章为需要离线视频生成能力的用户提供了完整技术路径。

小明的博客 1万+

python可以嵌入c语言吗_python中嵌入C语言脚本.docx

python 中嵌入 C 语言脚本借助 Cinpy 和 C 语言解释器 TinyCC ,可以在 python 程序里面直接嵌入 C 语言片断、不经编译直接使用 C 编写的函数了。win2k 平台上,简单的测试对比数据如下(递归方法计算第四十项兔子数列fib ( 40))语言实现时间(单位:秒)评python官方 python 2.4.3python fib 函数568.718天啊使用 psyco...

weixin_39708636的博客 199

AI测试实战:用文心一言5分钟生成登录功能测试用例(附Excel模板)

本文详细介绍了如何利用AI工具(如文心一言)在5分钟内高效生成登录功能测试用例,并提供了可直接应用的Excel模板。通过对比传统手工编写与AI生成的效率差异,展示了AI在软件测试领域的巨大优势,包括减少重复劳动、避免边界条件遗漏和提升格式标准化。文章还包含实战技巧、高级应用方案和行业最佳实践,助力测试人员快速提升工作效率。

weixin_30379531的博客 410

ROS机器人未知环境自主探索功能包explore_lite最全源码详细解析(一)

本系列文章主要针对ROS机器人常使用的未知环境自主探索功能包explore_lite展开全源码的详细解析,并进行概括总结。 本系列文章共包含六篇文章,前五篇文章主要介绍explore_lite功能包中 explore.cpp、costmap_tools.h、frontier_search.cpp、costmap_client.cpp等源码实现文件中全部函数的详细介绍,第六篇文章进行概括总结,包含自主探索功能包explore_lite的简介,实现未知环境自主探索功能的原理及流程总结,效果演示,使用功能包

慕羽★的博客 3936

python可以嵌入c语言吗_python中嵌入C语言脚本

借助Cinpy和C语言解释器TinyCC,可以在python程序里面直接嵌入C语言片断、不经编译直接使用C编写的函数了。win2k平台上,简单的测试对比数据如下(递归方法计算第四十项兔子数列fib(40))语言实现时间(单位:秒)评python官方python 2.4.3纯python fib函数568.718天啊使用psyco加速的python fib函数17.922比较接近,还行使用swig直...

weixin_35019679的博客 1372

基于STM32单片机智能循迹小车毕业设计

本文介绍了一种利用STM32F103C8T6单片机为控制核心,结合多种传感器以及PID算法实现循迹避障功能的智能小车。随着我国高科技水平的不断提高和工业自动化进程的不断推进,智能小车被广泛应用于各种玩具和其他产品的设计中,极大地丰富了人们的生活。本次设计利用反射式红外光电传感器探测路面黑线实现小车循迹,利用超声波测距传感器探测路径上的障碍,控制小车自动避障,整个系统具有自动循迹、自动避障、速度检测和无线遥控功能。其中,控制部分采用STM32F103C8T6单片机,STM32F103C8T6单片机是一

qq_48771816的博客 3974

python如何内嵌c语言,python中嵌入C语言脚本

《python中嵌入C语言脚本》由会员分享,可在线阅读,更多相关《python中嵌入C语言脚本(16页珍藏版)》请在人人文库网上搜索。1、WORD格式-可编辑-python中嵌入C语言脚本借助Cinpy和C语言解释器TinyCC ,可以在python程序里面直接 嵌入C语言片断、不经编译直接使用C编写的函数了。wi n2k平台上,简单的测试对比数据如下(递归方法计算第四十项兔子数列 fib ( 4...

weixin_29671137的博客 680

历年安徽省省赛AHOI初中组考点分类汇总考点分类汇总

持续更新中.....

weixin_42358969的博客 818

RK3568平台(电源篇)电源域IO配置

在kernel之前需要修改电源域,主控电源域的IO电平要与对接外设芯片的IO电平匹配,还要注意软件的电压配置要跟硬件的电压一致,否则,最坏的情况可能会导致IO的损坏。其实就是管理 IO 输出的电平;假如硬件上 IO 电源域配置为 3.3V,则 IO 输出最大电平为 3.3V;同理 IO 电源域硬件配置为 1.8V,则 IO 输出最大电平是 1.8V;这样有利于 IO 电平的灵活配置;

weixin_49303682的博客 3478

linux下c语言转成python,C语言嵌入Python

1.为什么要嵌入Python?这个问题问的好,一般静态语言与脚本语言(不仅仅是python),相互搭配,有两种方式,一种是用C语言写好模块,然后用python去整合,也被称之为扩展python,这样的好处是即有python的灵活性,又有c语言的效率,还有一种就是c语言嵌入python,这样我们就有了一个python解释器了,在游戏编程中常用这种方法,如果你是用静态语言编程,那么修改一些属性,就意为...

weixin_39847034的博客 267

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

c语言python.h文件-C语言中嵌入Python | 学步园

1.为什么要嵌入python?这个问题问的好,一般静态语言与脚本语言(不仅仅是python),相互搭配,有两种方式,一种是用c语言写好模块,然后用python去整合,也被称之为扩展python,这样的好处是即有python的灵活性,又有c语言的效率,还有一种就是c语言嵌入python,这样我们就有了一个python解释器了,在游戏编程中常用这种方法,如果你是用静态语言编程,那么修改一些属性,就意为...

weixin_39837041的博客 1720

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

html嵌入python语言的方法_C语言中嵌入Python | 学步园

1.为什么要嵌入python?这个问题问的好,一般静态语言与脚本语言(不仅仅是python),相互搭配,有两种方式,一种是用c语言写好模块,然后用python去整合,也被称之为扩展python,这样的好处是即有python的灵活性,又有c语言的效率,还有一种就是c语言嵌入python,这样我们就有了一个python解释器了,在游戏编程中常用这种方法,如果你是用静态语言编程,那么修改一些属性,就意为...

weixin_39763293的博客 220

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

python中嵌入C语言脚本

借助Cinpy和C语言解释器TinyCC,可以在python程序里面直接嵌入C语言片断、不经编译直接使用C编写的函数了。 win2k平台上,简单的测试对比数据如下(递归方法计算第四十项兔子数列fib(40))语言实现时间(单位:秒)评python官方python 2.4.3纯python fib函数568.718天

st780206的专栏 6637

C语言嵌入Python解释器实战(从入门到精通)

掌握C语言调用Python脚本的扩展技巧,轻松实现高性能程序与脚本的融合。适用于嵌入式开发、算法加速等场景,通过嵌入Python解释器实现灵活调用。详解API使用、数据交互与异常处理,提升开发效率,值得收藏。

PoliVein的博客 856

C语言嵌入Python解释器:直接调用OCR模型函数

技术整合价值:C语言系统可通过嵌入Python解释器,无缝接入AI模型能力性能优势明显:进程内调用避免序列化与网络开销,适合低延迟场景工程可行性高:CPython C API稳定成熟,广泛用于工业软件集成。

weixin_35835018的博客 709

python 嵌入c语言,将Python嵌入C语言后,由于未定义引用`Py_Initialize',链接失败

I am trying to compile the example from the docs https://docs.python.org/2.7/extending/embedding.html and my code looks exactly like the one under 5.1:#include intmain(int argc, char *argv[]){Py_SetPr...

weixin_36345456的博客 1335

C语言嵌入Python的3种方式,第2种90%的人从未用过

掌握C/Python混合编程性能优化的3种实用方法,重点揭秘90%开发者忽略的嵌入技巧。涵盖C扩展、PyBind11与Python内嵌C代码的应用场景与执行优势,提升运行效率。值得收藏

FastDebug的博客 1052

在C语言中如何嵌入python脚本

最近在写配置文件时,需要使用python脚本,但脚本是一个监控作用,需要它一直驻留在linux中运行,想起C语言中能够使用deamon函数来保留一个程序一直运行,于是想到写一个deamon,并在其中嵌入python脚本。 上网查一下,发现确实有办法做到,下面亲测有效: #include <Python.h> #include <stdio.h&gt...

810
上一篇: OpenGL圆柱面绘制贴图
下一篇: C/C++中嵌入Python
vampirem
博客等级 码龄14年 20粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值