CN102929645B - 一种内嵌Python解释器实现软件系统二次开发的方法 - Google Patents
一种内嵌Python解释器实现软件系统二次开发的方法 Download PDFInfo
- Publication number
- CN102929645B CN102929645B CN201210484124.2A CN201210484124A CN102929645B CN 102929645 B CN102929645 B CN 102929645B CN 201210484124 A CN201210484124 A CN 201210484124A CN 102929645 B CN102929645 B CN 102929645B
- Authority
- CN
- China
- Prior art keywords
- interpreter
- interface
- python
- secondary development
- user
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及软件系统二次开发方法领域,特别是公开了一种嵌入Python解释器实现系统软件对外提供二次开发的方法,包括归纳和抽象系统软件所需要对外提供的对象和方法;系统主程序配置链接Python解释器;在Python环境下为系统主程序编写实现对象和方法原型;为对象、方法定义函数内外接口并编写相关的接口说明文档;用户依据接口说明文档,以相应版本的Python脚本使用各个接口并融合入自身所需的流程、逻辑,实现自身二次开发的实际需求等步骤。本发明改变了插件式、流程式的传统的二次开发模式,实现面向对象、高度灵活的可编程接口的开发模式,使信息管理系统、辅助设计系统等具备更强的可扩展性。
Description
技术领域
本发明涉及软件系统二次开发方法领域,特别涉及一种软件系统对外提供二次开发的实现方法。
背景技术
行业通用软件系统对外提供二次开发的实现技术,是行业通用软件系统能够立足在复杂的应用环境中的有效途径。因为行业内各个企业的实际情况不同,行业通用的信息管理系统、辅助设计系统等无法完全符合各个使用单位的实际需求,如在造船行业,虽然多数造船公司整体生产管理流程一致,但流程上、标准上的细节差终究无法避免。所以,通用系统对外提供二次开发的实现技术,是使行业通用软件系统能够立足的有效途径。
目前,较多的信息管理软件、辅助设计软件均采用通过编写固定流程下的插件的方式对外提供二次开发,用户通过编写符合一定接口标准的插件,在满足设计初衷大流程的前提条件下,将自身的需求嵌入到通用系统中,从而实现自身的定制性需求。如申请专利号为CN200510098550.2的用于二次开发平台的基于控件的插件管理系统及方法,它首先根据控件的标准接口,提供一个与所述控件的通讯连接与事件响应相符合的接口协议;然后遵照所述接口协议,提供至少一个具有外部自定义功能的插件;在所述控件中维护有一个插件链,当应用程序启动时,由控件调用所述接口协议,将所述插件加载入插件链中。此种方式虽然较为简单方便,但是可扩展的约束太大,设计初衷的流程将限制用户的二次开发范围,用户只能在固定流程前提下进行二次开发,无法灵活拓展,适应性较差。另外,插件式的开发对用户二次开发所采用的程序语言有一定限制,如.Net平台的软件产品,其插件通常情况下要求是同平台语言编写的,如此则抬高了用户的二次开发资金成本。
发明内容
针对目前多数软件系统没有提供二次开发接口或仅通过固定流程下插件式的传统二次开发方法无法适应用户特定流程需求的现状,本发明提出一种内嵌Python解释器实现软件系统二次开发的方法,使通用软件系统对外提供基础的API接口,用户利用基础的API接口和免费的Python语言进行二次开发,依据实际需求进行流程组合,灵活扩展通用软件系统的功能。
本发明为解决上述技术问题采用的技术方案是内嵌Python解释器实现软件系统对外提供二次开发,具体方法如下:
步骤1,归纳和抽象系统软件所需要对外提供的对象和方法,这些对象和方法,是提供给用户二次开发的基本元素;
步骤2,为系统主程序配置链接Python解释器;进一步地,Python解释器版本的选择可以依据用户实现系统的编程语言,C/C++程序链接CPython解释器,.Net平台语言链接IronPython解释器,JAVA语言链接Jython解释器;
步骤3,在Python环境下,为步骤1归纳出的对象和方法在系统主程序中编写实现原型,该原型属于系统对外提供的二次开发框架的基础元素,相互之间并无流程关系;
步骤4,为步骤3中实现的对象、方法定义函数内外接口,并编写相关的接口说明文档,该接口说明文档是上述基础元素的接口功能、规格说明;
步骤5,用户依据接口说明文档,以相应版本的Python脚本使用各个接口并融合入自身所需的流程、逻辑,实现自身二次开发的实际需求。
本发明采用以上技术方案与现有技术相比,具有以下技术效果:
1、系统在进行二次开发设计时,只需进行基础对象、方法功能的归纳总结,不必进行通用流程、业务逻辑的设计;
2、主系统在链接Python解析器之时,可以依据系统主体的程序语言,选择相应版本的Python语言解析器进行链接,C/C++程序链接CPython解释器,.Net平台语言链接IronPython解释器,JAVA语言链接Jython解释器,对于非主流语言可以通过COM技术对合适的Python解析器进行包装后再行链接;
3、系统提供的二次开发接口说明文档,只需对接口规格进行说明,不必对任何流程性、业务逻辑进行说明,可读性、可理解性较高;
4、用户编写的Python脚本,均可免费进行,不需要任何二次开发语言工具的费用开销。
5、用户编写的Python脚本,可以自由控制、搭建自身的实际流程,灵活性很高。
附图说明
图1所示为内嵌Python解释器实现软件系统二次开发方法的技术原理图;
图2所示为内嵌Python解释器实现软件系统二次开发方法的流程图。
具体实施方式
下面结合附图对本发明的具体实施例对本发明做进一步的说明:
图1所示为内嵌Python解释器实现软件系统二次开发方法的技术原理图,本发明将软件系统主程序连接相应版本的Python的解释器,通过Python解释器提供内嵌的Python环境,在解释器所提供的环境中,主程序中对需要对外提供的对象及方法进行函数原型的构造、代码实现,并编写接口说明文档,用户通过接口说明文档,融合自身的实际业务逻辑、流程需求,以相应版本的Python脚本调用系统提供的接口,将自身灵活多变的实际业务逻辑、流程需求融入到系统中。
图2所示为内嵌Python解释器实现软件系统二次开发方法的流程图,结合本发明具体实施例作进一步的说明。本发明具体实施例以Windows操作系统为平台,以CodeBlock为编程工具,以C++语言为实现主程序的编程语言,以Cpython作为二次开发环境语言,以控制台程序作为主系统程序,向用户提供二次开发接口函数JMS_ChangeValue,Python二次开发脚本JMS.py。通过嵌入Python解释器实现系统对外提供二次开发流程如下:
步骤1:归纳分析系统软件,抽象出系统需要向外提供接口“JMS_ChangeValue”,该接口作用在于改变主系统进程中的一个变量的值;
步骤2:为主程序链接Python解释器,在CodeBlock的编译器和链接器选项中增加Python的头文件和库文件目录;配置操作系统的环境变量,在“系统变量”中增加“PYTHONHOME”,指向python目录;
步骤3:编写系统对外开放的二次开发接口的函数原型,包括以下过程:
3.1)C++程序中必须包含如下代码:#include<Python.h>//包含Python解释器接口文件;
3.2)实现二次开发接口函数JMS_ChangeValue的功能原型,其中,各参数、返回值等均需声明为PyObject类型;通过PyArg_ParseTuple、Py_BuildValue等解释器提供的接口方法,将与Python交互的接口值与本地值(主程序)进行转换,转换后进行本地处理。
3.3)编写函数原型与用户可调用的二次开发接口的绑定代码,通过解释器提供的数据结构体PyMethodDef,来绑定本地函数与二次开发的接口。
3.4)编写主程序调用用户脚本的控制代码(实际使用中,可以设计合适的机制灵活定义主程序调用用户脚本的文件路径):
3.4.1)通过解释器提供的Py_Initialize接口来初始化内嵌的python解释器;
3.4.2)通过解释器提供的Py_InitModule接口来初始化对外提供的Python接口模块的名称;
3.4.3)通过解释器提供的PyFile_AsFile接口将用户的二次开发脚本文件转换为文件指针;
3.4.4)通过解释器提供的PyRun_AnyFileEx接口将3中得到的文件指针交由解释器进行运行;
3.4.5)通过解释器提供的Py_Finalize接口关闭解释器,释放资源。
步骤4:为步骤3中编写的函数原型定义函数内外接口,并编写相关函数原型的接口说明文档;
步骤5:用户编写二次开发脚本进行二次开发,步骤如下:
5.1)脚本头部写明编码格式:#-*-coding:utf-8-*-
5.2)导入主程序提供的二次开发模块包;
5.3)将主程序提供的二次开发模块包中提供的各接口与用户所需的逻辑融合,编写符合用户需要的脚本文件。
综上所述,本发明能够使行业通用软件系统方便的进行二次开发接口基本元素的归纳总结及实现;能够避开前期设计中遇到流程无法确定、固定流程下的接口难以实现的问题;能够以免费开源的Python开发语言向用户提供二次开发环境;能够使用户根据自身的实际业务逻辑、流程需求编写二次开发程序并嵌入主程序,实现并解决了通用软件系统灵活应变、易于扩展的目的,为通用软件在行业内部立足提供了强有力二次开发的技术方法。
以上所述仅为本发明的较佳实例而已,并不以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (3)
1.一种内嵌Python解释器实现软件系统二次开发的方法,其特征在于,包括如下步骤:
步骤1,归纳和抽象系统软件所需要对外提供的对象和方法;
步骤2,系统主程序配置链接Python解释器;
步骤3,在Python环境下,为步骤1归纳出的对象和方法在系统主程序中编写实现原型,包括以下过程:
3.1)C++程序中必须包含如下代码:#include<Python.h>//包含Python解释器接口文件;
3.2)实现二次开发接口函数JMS_ChangeValue的功能原型,其中,各参数、返回值均需声明为PyObject类型;通过PyArg_ParseTuple、Py_BuildValue解释器提供的接口方法,将与Python交互的接口值与本地值进行转换,转换后进行本地处理;
3.3)编写函数原型与用户可调用的二次开发接口的绑定代码,通过解释器提供的数据结构体PyMethodDef,来绑定本地函数与二次开发的接口;
3.4)编写主程序调用用户脚本的控制代码,过程如下:
3.4.1)通过解释器提供的Py_Initialize接口来初始化内嵌的python解释器;
3.4.2)通过解释器提供的Py_InitModule接口来初始化对外提供的Python接口模块的名称;
3.4.3)通过解释器提供的PyFile_AsFile接口将用户的二次开发脚本文件转换为文件指针;
3.4.4)通过解释器提供的PyRun_AnyFileEx接口将步骤3.4.3)中得到的文件指针交由解释器进行运行;
3.4.5)通过解释器提供的Py_Finalize接口关闭解释器,释放资源;
步骤4,为步骤3中实现的对象、方法定义函数内外接口,并编写相关的接口说明文档;
步骤5,用户依据接口说明文档,以相应版本的Python脚本使用各个接口并融合入自身所需的流程、逻辑,实现自身二次开发的实际需求;
所述对象、方法是用户二次开发的基本元素,相互间无流程关系。
2.根据权利要求1所述的内嵌Python解释器实现软件系统二次开发的方法,其特征在于:步骤2中,用户可依据实现系统的编程语言,选择链接相应版本的Python解释器,C/C++程序链接CPython解释器,.Net平台语言链接IronPython解释器,JAVA语言链接Jython解释器。
3.根据权利要求1所述的内嵌Python解释器实现软件系统二次开发的方法,其特征在于:步骤4中,所述接口说明文档是对象、方法原型的接口功能、规格说明。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210484124.2A CN102929645B (zh) | 2012-11-23 | 2012-11-23 | 一种内嵌Python解释器实现软件系统二次开发的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210484124.2A CN102929645B (zh) | 2012-11-23 | 2012-11-23 | 一种内嵌Python解释器实现软件系统二次开发的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102929645A CN102929645A (zh) | 2013-02-13 |
CN102929645B true CN102929645B (zh) | 2016-04-27 |
Family
ID=47644457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210484124.2A Active CN102929645B (zh) | 2012-11-23 | 2012-11-23 | 一种内嵌Python解释器实现软件系统二次开发的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102929645B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104239613B (zh) * | 2014-08-29 | 2017-11-14 | 北京动力机械研究所 | 发动机协同设计集成应用系统 |
CN104793928A (zh) * | 2015-01-30 | 2015-07-22 | 深圳雪帆软件有限公司 | 一种基于Java的开发与运行平台实现方法及系统 |
CN105260177A (zh) * | 2015-09-21 | 2016-01-20 | 广东大工数值仿真研究院有限公司 | 基于SiPESC平台的Python扩展模块开发方法 |
CN105824628B (zh) * | 2016-03-16 | 2019-05-24 | 湖南中车时代通信信号有限公司 | 安全计算机平台二次软件开发的方法 |
CN105824630B (zh) * | 2016-03-16 | 2019-05-10 | 湖南中车时代通信信号有限公司 | 支持二次软件开发的轨道交通信号系统 |
CN107911135A (zh) * | 2017-10-30 | 2018-04-13 | 深圳市中兴物联科技有限公司 | 无线通讯模块 |
CN110619215B (zh) * | 2019-08-23 | 2021-08-20 | 苏州浪潮智能科技有限公司 | 一种代码安全扫描方法及系统 |
CN115113860B (zh) * | 2022-08-31 | 2022-11-18 | 北京云枢创新软件技术有限公司 | 基于Python的EDA软件二次开发系统 |
CN117150515B (zh) * | 2023-10-31 | 2024-01-26 | 上海合见工业软件集团有限公司 | Eda二次开发源代码的安全保护方法、电子设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101126981A (zh) * | 2007-09-28 | 2008-02-20 | 华为技术有限公司 | 脚本命令注册方法、调用源程序代码的方法和装置 |
-
2012
- 2012-11-23 CN CN201210484124.2A patent/CN102929645B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101126981A (zh) * | 2007-09-28 | 2008-02-20 | 华为技术有限公司 | 脚本命令注册方法、调用源程序代码的方法和装置 |
Non-Patent Citations (1)
Title |
---|
基于Python的ABAQUS二次开发方法与应用;张强等;《舰船电子工程》;20110228;第31卷(第2期);第131-134页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102929645A (zh) | 2013-02-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102929645B (zh) | 一种内嵌Python解释器实现软件系统二次开发的方法 | |
CN106990966A (zh) | 基于前端框架的移动端跨平台应用开发框架及开发方法 | |
CN101795270B (zh) | 一种基于串口的服务器控制方法 | |
US10026041B2 (en) | Interoperable machine learning platform | |
CN102160037B (zh) | 只需设计一次就能在任何平台应用的移动应用开发框架 | |
CN102298535B (zh) | 绑定数据并行设备源代码 | |
CN103049320B (zh) | 在浏览器中启动外部应用程序的方法和装置 | |
US20120173962A1 (en) | Online application providing apparatus | |
CN103617066A (zh) | 一种工作流引擎及其实现方法 | |
CN104391826A (zh) | 一种数据格式转换方法及数据格式转换器 | |
US8756407B2 (en) | Configuration rule prototyping tool | |
CN102222017A (zh) | 通过不可见接口实现不符合abi特征的方法和系统 | |
CN102662648B (zh) | 一种通讯终端的嵌入式软件开发仿真平台及其应用 | |
CN101261600B (zh) | 一种软件测试装置及测试软件的设计方法 | |
CN101976199A (zh) | 面向对象的中间件分布式系统开发平台 | |
CN102968333A (zh) | 使本机程序被主程序调用时继承事务上下文的方法和系统 | |
CN103400013A (zh) | 一种可重用的仿真模型及其开发和使用方法 | |
CN102014118A (zh) | 一种实现通用抄读多种电能表的方法 | |
CN101859244A (zh) | 多工具链工程构建方法及系统 | |
CN105912334A (zh) | 一种autosar软件组件的内部行为对象代码生成方法 | |
CN106598620A (zh) | 代码生成方法及代码生成器 | |
CN102929682A (zh) | 自动扩展tcl语言的预处理方法和装置 | |
CN107818512A (zh) | 产生保单批文的方法、装置、设备及计算机可读存储介质 | |
CN103309784B (zh) | 测试系统与测试方法 | |
CN107179903B (zh) | 用于使用模型驱动开发来开发基于移动的应用的系统和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB03 | Change of inventor or designer information |
Inventor after: Wang Jucheng Inventor after: Ma Xiaoping Inventor after: Zhu Jun Inventor after: Tian Liumin Inventor before: Ma Xiaoping Inventor before: Zhu Jun Inventor before: Zhang Xiang |
|
COR | Change of bibliographic data | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |