设为首页 加入收藏

TOP

工程脚本插件方案 - c集成Python基础篇(一)
2017-10-12 17:39:21 】 浏览:3596
Tags:工程 脚本 插件 方案 集成 Python 基础

序: 为什么要集成脚本,怎么在工程中集成Python脚本。

在做比较大型的工程时,一般都会分核心层和业务层。核心层要求实现高效和稳定的基础功能,并提供调用接口供业务层调用的一种标准的框架划分。在实际中根据需求会拆分的更细。外部的表现形式就是一个核心动态库,带着一堆业务业务动态库。通过一个调度程序把这些链接起来,外加一堆配置文件,就形成一个完成的项目。

这种模式在一个团队开发中,工作职责比较容易划分。制定API接口后,开发工作基本可以并行实现,包括后期的功能测试(白盒、黑盒)。不管工程使用什么语言,基本都是如此。

c语言无疑是很强大而又灵活的,但是开发比较复杂,开发工期比较长。全部使用c/c++ 进行开发的话,编译调试整合发布,就需要大量时间,包括运营维护的话,呵呵~ 。整个产品的生命周期需要投入大量的人力来维持这个产品。特别是对做定制的最终用户的话,那就可能就是一场旷日持久战。

刚才说的一般工程都会包括2方面,核心和扩展。是公司级产品的话,一定会出于盈利问题,会对核心做保密(商业机密)。扩展是在核心基础上实现的,很大程度上保密等级就没那么高,甚至可以是开放式的。方便有一定能力的用户直接扩展。这是最理想的一种情况。

如果业务层还是使用c/c++的话,估计用户没有几个有能力或者说不太愿意去做扩展。只能公司团队进行维护和扩展。当然开源项目除外,活跃的开源项目还是有很多大侠们愿意去扩展的。当降低扩展的难度,不仅可以缩短开发周期降低成本,降低运营维护成本。如果产品够优秀,还能吸引有一定能力的客户来帮忙做扩展。扩展简单方便,用户自己都能扩展,项目运营成本必定降低。这就皆大欢喜。

脚本是一个非常方便的东西,不需要编译直接运行就能看到结果。不用考虑大量系统相关的开发技巧,更贴近实际业务的描述,修正问题不需要重新编译发布,维护非常方便。能大大提供生产效率,这就是我们所须要的。现在流行的脚本语言有很多Ruby、Perl、Python、Lua、java script等等。。。,反正很多。

脚本语言比较:

1、python 简单易学,有大量扩展可以使用。
2、Ruby: 魔幻型纯面向对象语言,非常灵活,学习相对其他语言有一定难度。
3、Lua: 超轻量级,性能高效。很多游戏使用Lua提供扩展。

使用那种脚本作为扩展,要看实际项目和现有资源的情况而定。本文只介绍python的集成。

废话这么多,主要的目的就下面几个。

扩展目的:

1、高可配性。 解决一些简单配置不能实现的组织、回调功能,避免改动重编重发布。
2、为了使用已有的库。 如原来你有很多积累,写了一些适合工程开发的库。
3、优化程序提升性能。 对脚本程序使用库的一种情况。

集成: 就是通过简单、直接和快速的在不同语言直接调度切换控制,属于无缝连接。就像使用同一种语言在不同的动态库之间调度。而不是那种使用套接字和管道等的间接调度。

混合开发中,不管python或C都可以作为“上层”。因此两方面都要提供入口提供对方调度。这个其实和正常的同一语言编写的插件模式是一致的。核心提供接口和注册入口,扩展注册入口并调用接口。

嵌入接口: C程序中运行Python的代码
扩展接口: Python程序中运行C的代码库

测试环境:
window 7
vs2015
python 3.5

1、准备环境

使用的Python是3.5版本的。

首先肯定是须要个python的运行环境,可以直接从官网python.org下载Python3.x 进行安装。建议直接下源代码编译,因为里面有很多代码可以参考。

windows配置

python安装路径以下为例d:\python,在系统的用户环境变量中添加。

1、 增加python搜索路径,方便代码运行调试

path=d:\python;d:\python\pcbuild\win32

2、 增加python环境路径。加载模块时默认会从配置路径中搜索。

PYTHONPATH=.;d:\python\lib;d:\python\pcbuild\win32;D:\Python\Lib\site-packages;d:\python

3、 增加编译路径。

PyInc=d:\python\include;d:\python\pc
PyLib=d:\python\pcbuild\win32

方便VS搜索路径配置。在工程中,只需引用配置变量路径,可以直接使用$(PyInc) 和 $(PyLib)。

提示: 由于是自己编译的,一些环境参数没有须要自己加。注意大小写

2.1、嵌入Python第一个简单工程

创建测试工程

在VS中创建一个空的VC++控制台程序。在工程选择的搜索目录中加入$(PyInc)

选择菜单:Project->Properties...

VC++ Directories分类的Include Directories中加入先前定义的环境变量$(PyInc)。确保Python的头文件能搜索到。

使用环境变量的一个好处是,方便不同机器不同环境的切换,不需要修改工程配置。

提示: 可以不建工程,直接使用makefile方式进行编译。

创建script.py脚本

在工程中创建一个新文件,直接改名为script.py,复制下面内容。

注意: 编码设置为UTF-8

"""
在C中调用Python模块运行。
调用时须要把文件放在程序当前运行目录(保证在搜索目录中)。
www.moguf.com  2016-05-28
"""

message = 'hello life...'

def transform(input):
    input = input.replace('life', 'Python')
    return input.upper()

在Python环境中运行这个脚本,可以得到下面结果。可以看到打印出 hello life... 和转换后的字符串 HELLO PYTHON...

Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\CrystalIce>cd /d D:\Dev\MySimple\pythoninc\embedsimple

D:\Dev\MySimple\pythoninc\embedsimple>python
Running Release|Win32 interpreter...
Python 3.5.0 (default, Nov  4 2015, 21:58:28) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import script
>>> print(script.message)
hello life...
>>> x = script.message
>>> print(script.transform(x))
HELLO PYTHO
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于 OJ1574的参考题解(较麻烦) 下一篇二项展开式的系数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目