《扩展和嵌入python解释器》1.1 一个简单的例子

python嵌入c++ 调试器_扩展和嵌入Python之C++程序中嵌入Python解释器 大家好,我又回来了!貌似和python结下了不解之缘,最近主要在做python的扩展和嵌入。在正式写代码之前,先唠叨几句环境的搭建。当时搭建环境的时候也是费了一番辛苦。【叹气】在嵌入和扩展Python时,需要调用python的c api,则需要包含Python.h,若想成功的将其包含,需要安装python dev。Ok,终于成功包含了Python.h,然后你欢天喜地的去运行程序了,发现编译不过去。... 阅读详情
static PyObject *
spam_system(PyObject *self, PyObject *args)
{
    const char *command;
    int sts;

    if (!PyArg_ParseTuple(args, "s", &command))
        return NULL;
    sts = system(command);
    return Py_BuildValue("i", sts);
}

1.1 一个简单的例子

让我们创建一个名叫 "spam" (这是Python粉丝Monty喜爱的食物)的扩展模块 ,我们打算创建一个Python接口,使用C库函数 system().1.1 这个函数以一个空字符结尾(null-terminated)的字符串作为参数,并返回一个整型数,我们想这个功能够象下面这样从Python调用:

 

>>> import spam
>>> status = spam.system("ls -l")

首先创建文件 spammodule.c. (一般地,如果模块名为"spam", C它的实现文件名应为 spammodule.c; 如果模块名很长, 如"spammify", 模块名可以为 spammify.c ) .)

我们文件的第一行应为:

 

#include <Python.h>

这样就引入了Python API(如果你喜欢,可以增加描述模块的目的和版权信息)。

 

警告: 由于Python可能定义了一些预处理定义,在一些系统上,这些预处理可能影响标准头文件,你 最好 在包含任何标准头文件前包含 Python.h文件。

除了那些定义在标准头文件中的用户可见的符号,其他所有在 Python.h文件中定义的用户可见符号有 "Py" or "PY"前缀。 为方便起见,也由于它们被Python解释器广泛使用, "Python.h"包含几个标准头文件 <stdio.h>, <string.h>, <errno.h>, and <stdlib.h> 。如果后几个头文件在你的系统上不存在,需要直接声明malloc(), free() 和realloc() malloc(), free() and realloc() 函数。

接着,我们继续向模块文件添加C函数,在Python表达式。 "spam.system(string) "被计算时,这个C函数将被调用:

 

这是从Python参数列表(如:单个表达式 "ls -l")到直接翻译为C函数参数。C函数总是有两个参数,一般命名为self 和 args 。

self参数只有当C函数实现内置方法使用,而实现函数时不使用。在本例中,由于我们定义的是一个函数而不是方法,self 总是一个NULL 指针(这样做可以使解释器不必关心两种C函数的不同)。

args 参数是一个指向包含参数的Python元组对象指针。元组的每个条目对应于调用参数列表的一个参数。参数是Python对象――为了在我们的C函数里使用他们,我们必须把它们转换为C值。Python API函数PyArg_ParseTuple() 检查参数类型并把它们转换为C值。它使用一个模板字符串来确定的参数类型和转换后的值存入C变量的类型,后面详述。

如果所有参数都是正确的类型,并且参数代表的各元素都被存储到传入地址的变量中,则PyArg_ParseTuple()函数返回为true(非零)。 如果无效的参数被传入,函数返回false(零)。在后面的例子中,PyArg_ParseTuple也产生一个恰当的异常,于是调用函数立刻返回 NULL (正如我们在例子中看到的)。

什么是 Python 解释器? Python 解释器是一种软件程序,它读取并执行 Python 代码。Python 作为一种解释型语言,其代码无需经过编译为二进制文件,而是由解释器逐行读取、解析并执行。解释器在 Python 的运行过程中扮演了“翻译官”的角色,直接将高层次的 Python 代码翻译成底层机器能够理解的语言。 阅读详情

相关推荐

Python4Delphi:在Delphi应用中嵌入Python解释器的完整指南

在软件开发中,脚本语言嵌入是扩展原生应用能力的常见技术方案,其核心原理是通过桥接层在宿主进程中加载并控制外部解释器。这种技术能显著提升开发效率,允许开发者复用成熟的第三方生态库,实现“专业工具做专业事”的架构优势。Python作为当前最流行的胶水语言,拥有丰富的数据科学、机器学习与网络爬虫库,而Delphi则是经典的Windows原生应用开发平台。Python4Delphi(P4D)正是连接这两大生态的桥梁,它通过在Delphi进程中嵌入完整的Python解释器,让开发者能在保持VCL/FireMonkey

weixin_33997389的博客 557

扩展和嵌入Python之C++程序中嵌入Python解释器

大家好,我又回来了! 貌似和python结下了不解之缘,最近主要在做python的扩展和嵌入。 在正式写代码之前,先唠叨几句环境的搭建。当时搭建环境的时候也是费了一番辛苦。【叹气】 在嵌入和扩展Python时,需要调用python的c api,则需要包含Python.h,若想成功的将其包含,需要安装python dev。Ok,终于成功包含了Python.h,然后你欢天喜地的去运行程序了...

Pou光明的博客 3643

16、扩展和嵌入 Python:全面指南

本文是一份关于扩展和嵌入 Python 的全面指南,详细介绍了如何在不同系统上编译和链接扩展模块,包括静态扩展和动态扩展的具体实现步骤。同时,还涵盖了使用 SWIG 等工具自动化生成 Python 与 C/C++ 接口的方法,并探讨了如何将 Python 解释器嵌入到其他应用程序中,以实现更强大的集成与交互功能。无论是希望提升 Python 性能,还是希望将 Python 与其他语言集成的开发者,都能从本文中获得实用的知识和解决方案。

zero1的博客 122

Python高级编程——编写扩展

Python扩展三种不同的实现方式: 一、编写纯C扩展。 写过JNI的人很容易理解,纯C扩展就是利用Python/C API来扩展python应用。C/API的详细使用,请参见:https://docs.python.org/3.6/c-api/ 例子: """setup.py文件:用来告诉解释器我们的扩展是如何编译的 扩展的构建过程可以通过Python的setup.py构建...

kieven2008的专栏 736

AudioTrack音频播放流程深度解析

深入解析Android AudioTrack音频播放的完整链路:从Java API到Native层,从共享内存Ring Buffer机制到FAST Track低延迟优化,配合源码分析带你彻底搞懂Android音频播放的底层原理

Cheson的专栏 940

用Blender给ArduPilot无人船编队设计灯光秀:从建模到飞行的保姆级教程

本文详细介绍了如何利用Blender和ArduPilot为无人船编队设计灯光秀的全流程技术方案。从3D动画设计、坐标转换、数据导出到ArduPilot飞控配置和灯光控制,提供了一套完整的保姆级教程,帮助开发者实现水面灯光编队表演。

weixin_29213525的博客 386

C++ 扩展和嵌入 Python(1)

C++ 扩展和嵌入 Python(1)       Python简介Python是一种简

问尘专栏 3753

SAP PP未清生产订单关闭物料退料、新工单发料批量处理

( werks = '1001' lgort = 'A004' lgobe = '组装-成品组装' )( werks = '1002' lgort = 'C006' lgobe = '组装-二车间' )( werks = '1002' lgort = 'C007' lgobe = '组装-二车间' )( werks = '1001' lgort = 'A007' lgobe = '组装-MS' )( werks = '1001' lgort = 'A008' lgobe = '组装-GW' )

dingqing86的专栏 1192

python解释器实现及其嵌入式应用:内部模块定义及扩展

本文介绍mp内部模块的实现,如何自定义内部模块,面向读者:对python编译器内部实现有兴趣。要求:只需具有python应用经验即可。 发表于 Micropython开发:内部模块定义及扩展 Micropython需要支持导入模块,同时,设备驱动也要能够以python模块的形式工作,那么在python解释中必须实现这种接口。外部模块的定义位于$(tree)/extm

叶玄青的博客 3115

从Si3N4到SiNx:一文搞懂芯片制造中氮化硅的化学式玄机(附工艺参数影响)

本文深入探讨了芯片制造中氮化硅(SiNx)化学式的调控艺术,揭示了从Si3N4到SiNx的转变如何影响材料性能。通过分析PECVD和PVD工艺参数对x值的精确调控,以及x值对电学和机械性能的影响,为半导体制造提供了实用的工艺优化策略。

weixin_30776273的博客 195

UE5新手必看:如何在UMG控件中嵌入浏览器实现Web页面展示(附完整步骤)

本文为UE5新手提供了在UMG控件中无缝集成Web浏览器的完整实战指南。详细介绍了从启用WebBrowser插件、创建并配置WebBrowser控件蓝图,到编写动态加载与交互逻辑,以及在游戏关卡中实例化UI的全过程。文章还分享了性能优化技巧与常见问题排查方法,帮助开发者高效实现游戏UI内的Web页面展示与交互。

weixin_29243063的博客 710

python解释器实现及其嵌入式应用:解释器移植

一 概述 1-1 知识储备 1-2 成果展示 二 移植过程 2-1 代码选型 2-2 启动代码实现 2-3 指令集兼容 4 修改内存分布 5 交互界面 三 总结与展望 一 概述micropython:介绍与编译 一文介绍了Micropython的语法特点,当前的应用平台以及在linux下的试用。这篇文章接着介绍如何将Micropython编译器移植到exynos 4412平台下,让他工作起来。1-1

叶玄青的博客 7495

Amos实战:如何用Bootstrap法检验中介效应?附完整操作步骤

本文详细介绍了如何使用Amos软件通过Bootstrap法检验中介效应,包括模型设定、参数配置和结果解读。Bootstrap方法因其不依赖正态分布假设、统计功效高等优势,成为中介效应分析的首选方法。文章提供了完整的操作步骤和实用建议,帮助研究者准确评估变量间的中介作用机制。

zz67890的博客 1442

C++嵌入Python解释器

Python作为可以扩展的编程语言,提供了完整的Python/C API,用于扩展Python程序的功能。一方面是使用API编写Python程序模块在Python脚本中使用,另一方面是在C/C++中嵌入Python,从而实现C/C++调用Python程序。C++嵌入Python解释器就是在c++程序中创建一个python解释器,并通过api让解释器去执行python代码。使用嵌入解释器有配置解释器、初始化、执行语句、加载模块、调用函数等过程,这些过程全部都是python提供的API操作。

qq_30386941的博客 3116

汽车行业OTD业务模式入门学习

本文是在学习彭俊松老师的《汽车行业整车订单交付系统》后,对于OTD理解的一些摘录,供诸位参考学习。

qq_40664711的博客 1万+

Fiori Elements Analytical List Page 标题区配置全攻略:从变体、过滤模式到 UI.KPI 的工程化落地

ALP标题区是Fiori Elements Analytical List Page的核心交互区域,承担变体管理、过滤模式切换、KPI展示等关键功能。本文系统解析了标题区的组成结构、可用能力及工程实现要点,包括:1)标题区包含过滤类型切换、全局KPI、变体管理等交互元素;2)详细说明视觉过滤与紧凑过滤的同步规则及实现方式;3)介绍OData V2下通过UI.KPI注解配置标题区KPI的方法;4)提供manifest.json配置示例和CDS注解写法。文章还对比了V2与V4版本的差异,为ALP开发提供实用指导

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 245

C++ 扩展和嵌入 Python

  C++ 扩展和嵌入 Python作者:胡金山下载源代码Python简介  Python是一种简单易学,功能强大的解释型编程语言,它有简洁明了的语法,高效率的高层数据结构,能够简单而有效地实现面向对象编程,特别适用于快速应用程序开发,也可以用来开发大规模的重要的商业应用。Python是一个理想的脚本语言。  Python免费开源,可移植到多种操作系统,只要避免使用依赖于特定操作系统的特性

XieYongOnLine的专栏 1288

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

《扩展和嵌入python解释器》1.4 模块方法表和初始化函数

1.4 模块方法表和初始化函数 下面,我演示如何从Python程序调用spam_system().首先,我们需要在’方法表’列出名称和地址:  static PyMethodDef SpamMethods[] = { ... {"system", spam_system, METH_VARARGS, "Execute a shell command."},

asmc51的专栏 6221

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

《扩展和嵌入python解释器》1.5 编译和连接

1.5 编译和连接在你使用扩展之前,有两件事情需要做:编译和与Python系统连接。如果你使用动态加载,细节依赖于你的系统用户的动态加载风格。关于详细信息,构造扩展模块参见(chapter 3),至于仅在WINDOWS上构造的其他相关信息,参见(chapter 4). 如果你不使用动态加载,或者说,你想使你的模块永久成为Python解释器的一部分,必须改变安装设置,并重新编译解释器,这在U

asmc51的专栏 4687

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

在C++软件中嵌入python解释器

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34254823的博客 882

python可嵌入和可执行版本_C 扩展和嵌入 Python

Python是一种简单易学,功能强大的解释型编程语言,它有简洁明了的语法,高效率的高层数据结构,能够简单而有效地实现面向对象编程,特别适用于快速应用程序开发,也可以用来开发大规模的重要的商业应用。Python是一个理想的脚本语言。Python免费开源,可移植到多种操作系统,只要避免使用依赖于特定操作系统的特性,Python程序无需修改就可以在各种平台上面运行。Python拥有现代编程语言所具有的一...

weixin_42511507的博客 836

《扩展和嵌入python解释器》1.8 扩展函数的关键字参数

1.8 扩展函数的关键字参数PyArg_ParseTupleAndKeywords()函数声明如下:  int PyArg_ParseTupleAndKeywords(PyObject *arg, PyObject *kwdict, char *format, char *kwlist[], ...);

asmc51的专栏 5123

《扩展和嵌入python解释器》1.12 为扩展模块提供C API

1.12 为扩展模块提供C API(Providing a C API for an Extension Module)许多扩展模块仅仅提供Python使用的新函数和类型,但有时扩展模块的代码对其他模块有用。例如,一个扩展模块实现了新类型’collection’,功能象没有顺序的list一样。就象标准的Python list类型有运行扩展模块创建操作list的C API一样,这个新collec

asmc51的专栏 5048

出来搞事情了,iOS项目中嵌入Python解释器

前言 想必大家都知道 Python 是一个最近几年火到爆炸的语言。大数据、机器学习、爬虫、自动化运维balabala一大堆应用。良好的可读性,对于上手难度也不会门槛太高。 之前公司项目中有做导航App,我带搜索小组。功能交互啥玩意的都基本上定好了,但是有一些国外商业化数据太贵也不够全面,数据可新等级也不咋地,没米下锅啊。负责做数据分析的大哥就pa了上亿条 POI 数据,????上天。(当然还是要遵纪守法) 今天本文仅是在项目中嵌入Python编译环境,然后调用 Python 中的方法,并解析返回值。另鉴于本

tripleEyeAline的博客 1074

《扩展和嵌入python解释器》1.9 构造任意值

1.9 构造任意值Py_BuildValue()函数和PyArg_ParseTuple()相同,声明如下:  PyObject *Py_BuildValue(char *format, ...);Py_BuildValue()函数和PyArg_ParseTuple()函数类似,识别一系列格式化单元,但参数(作为输入参数,而不是输出参数)必须不能是指针,而是值。函数返回一

asmc51的专栏 4835
上一篇: 《扩展和嵌入python解释器》1. 用C或C++扩展Python
下一篇: 《扩展和嵌入python解释器》1.2 Intermezzo: 错误和异常
asmc51
博客等级 码龄24年 23粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值