iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Embedded Python应用小结
  • 495
分享到

Embedded Python应用小结

小结EmbeddedPython 2023-01-31 08:01:55 495人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

Http://www.blogGogo.com/?cat=7 Embedded python应用小结 Thursday, January 24th, 2008 很久以前就想写一篇这方面的笔记,这次做一个客户端验的模块,服务器端是用C#写

Http://www.blogGogo.com/?cat=7
 Embedded python应用小结
Thursday, January 24th, 2008

很久以前就想写一篇这方面的笔记,这次做一个客户端验的模块,服务器端是用C#写的DES3加密,还要用到Socket连接,实在不是一般的麻烦,懒人有懒办法,决定用Python脚本来实现这个功能,顺便翻出以前的代码。把问题总结一下。

总的说起来Python Embeded有几个步骤。

(1)初始化Python脚本运行环境

Py_Initialize();

(2) 脚本的编译

bytecode = Py_CompileString(script.c_str() , "active" , Py_file_input)

python有多种embeded的形式,我最喜欢的是用Py_CompileString来编译一个.py的脚本文件,这样有下面几个好处,引用方便,调试方便,灵活。

编译好后会返回一个PyObject* 的bytecode对象

要注意的是.py脚本的格式很重要,一定记得换行用Unix方式的,否则是不会编译通过的,我第一次时就找了很久才发现这个问题,还有一个要注意的问题是最好编一个调试版本的python的dll和库,这样便于发现问题。

(3)导入编译好的脚本

module=PyImport_ExecCodeModule("active",bytecode),这个过程是构造库的过程,运行完成之后就会把你要应用的Python库装入内存当中。

(4)从module中导出对象

dict = PyModule_GetDict( module )

导出对象表后你就可以按照你的需要使用你想用的python对象,这里常用的是类,方法,函数,我这里只用了最简单全局函数,用fun = PyDict_GetItemString( dict , "active" );得到想要使用的函数对象。

(5)调用Python函数

还剩下一个问题了,如何给调用的Python函数传递参数

python函数的参数是一个Tuple类型的值,通俗的理解就是名字和对象的列表,这样不管你传递多少参数,只要用一个Tuple类型就都解决了,代码如下

args = PyTuple_New( argsnum );
if( !args )
{
    PyErr_Print();
    assert(false);                                       
}   
for( i = 0 ; i < argsnum ; i++ )
{
    value = PyString_FromString( strings[i] );
    PyTuple_SetItem( args , i , value );
}


用PyString_FromString等类型转换函数就可以实现参数生成的过程了。

(6)调用函数,得到返回值

value = PyObject_CallObject( fun , args );
if(!value)
{
    PyErr_Print();
    assert(false);   
}

value是PyObject用转换函数就可以得到c++类型的返回值了,到这儿一个完整的调用过程就结束了

(7)其它

调用结束后释放脚本运行环境Py_Finalize();

注意下面几个问题,PyObject*都是有引用计数的,看文档说明有些对象是要自己处理引用计数的用Py_DECREF来释放对象,一般说如是类new操作的对象都要释放对象,如果是通过query出来的对象一般不用释放。

时间有限,很多细节的东西没有办法写得很详细了,希望我的笔记能帮助做同样工作的程序员们。

 

 

BoostPython应用小结

Thursday, January 3rd, 2008

这 两天抽空用boost写了一个Python的扩展,主要用来验收收到的文件内容,结果发现了一个莫名其妙的错误,主要是在调用扩展函数的时候,在析构调用 参数的时候会报一个错误,是释放堆内存时的一个异常,联想以前写程序时出现的问题,想到可能是因为我的扩展是一个动态库,这个动态库要依赖 boost_python的动态库,在释放内存时会出现问题,于是想到把boost_python编成静态库,然后静态链接解决这个问题。把 boost_python改成静态库后加到工程中发现很多符号找不到,仔细看错误,发现引入的符号还是以动态库符号的方式引用的,估计是宏定义不对,再打 开VC工程属性->Preprocessor->Preprocessor Definitions找到一个定义"BOOST_PYTHON_DYNAMIC_LIB"把这个改成 "BOOST_PYTHON_STATIC_LIB"重新编译,扩展工程也同样定义BOOST_PYTHON_STATIC_LIB重新编译,一切OK。 希望我的经验能帮助其它用boostpython开发的程序员们。

wxPython开发心得

Thursday, March 22nd, 2007

昨 天吃饭,老婆又中了50元,这是我们家小呼呼带给我们俩又一笔小财,我们家这个小金猪真有财运哈,高兴死我了…..我这两天终于把demo搞定了,说实话 还真是有点儿复杂,为了演示方便,想写一个类似xampp那样的控制台程序,这样就连老板也可以做演示,想了半天选定用wxPython做UI的设计,做 UI的过程中对python的界面开发也有了一些心得。

(一)wxPython的框架

这个用过MFC的都应该很清楚,一般显示一个窗口要创建一个基本的application类(从wx.App)用来做窗口主线程,用来处理 windows消息的,然后还要有一个主窗口,窗口类型根据你的需要选择不同的窗口类型,我选择的是wx.Frame,剩下的工作就是把wxDemo打 开,把你想用的代码C & P过来就行了,基本上你能想到的一般控件都可以在例子中找到。一般消息通过调用Bind函数可以很方便的实现消息回调。

(二)wxPython不足

仔细看了wxPython的例子发现没有提供一些特别的控件如视频编辑中的时间标尺的控件,不知道怎么实现自己定义的一些控件。

(三)其它补充

python中os.spawnl的说明,用这个命令打开一个子进程,我用这个函数实现打开外部URL的功能,发现一个问题,要指定全路径才可以, 这个不是很方便,不知道是不是有别的简单的方法,服务器的启动用wx.Process的包装类来实现,很方便,原来想把命令行输出重定向通过管道把服务器 输出重定向到我的Edit控件输出,发现会有死的现象,后来放弃了,真接到控制台吧,也挺方便的。

要是想做个工具什么的用wxPythong还是不错的选择,代码编写简单,而且还可以跨平台,不过要是做太复杂的界面还是不是很方便,我想到的解决方案就是用boost和c++为python做扩展,这个目前没有时间实现了看以后的吧。

Python编程Decorator

Monday, February 5th, 2007

Python 中在2.4中加入一种新的语法元素Decorator,从字面上讲这个语法元素是一个修饰符,在Dr.Dobb’s的文章中有这样一段描述” Decorators are Python objects that can reGISter,annotate,and/or wrap a Python function or object”,个人理解就是对一个函数进行调用前做些额外的处理,有点像挂函数钩子,执行这个函数前先经过一个处理后再真正调用这个函数本身,这个语法 的出现最早也是为了方便的实现claSSMethod和staticmethod的调用。Deocrator在Python元编程里有很重要的作用,这方 面的概念跟Java中的反射很相似,下面的例子是说明Decorator的一个简单应用。

不用Decorator

class democlass:
def demomethod(cls,x,y):
print ‘class something : somemethod %d , %d’ % (x,y)
demomethod = classmethod(demomethod)

使用Decorator

class democlass:
@classmethod
def demomethod(cls,x,y):
print ‘class something : somemethod %d , %d’ % (x,y)

(一)Decorator应用之一:Trace 函数

这个是最普通的一个应用,使用Trace函数或一个Trace类可以知道一个函数的状态和参数,这个功能可以很方便的帮助你调试代码,了解当前的运 行情况,这里将用到下面几个知识点Function as Decorator、Object as Decorator、Decorator with arguments(参数)

1.Function Decorator

def traced(func):
def wrapper(*__args,**__kw):
print ‘entering’,func,__args,__kw
try:
return func(*__args,**__kw)
finally:
print ‘exiting’,func
return wrapper

2.Class Decorator

class traced:
def __init__(self,func):
self._func = func
def __call__(__self,*__args,**__kw):
print ‘entering’,__self._func
try:
return __self._func(*__args,**__kw)
finally:
print ‘exiting’,__self._func

@traced
def demofun(x,y):
print ‘call demofun’,x,y

if __name__ == ‘__main__’:

demofun(0,1)

======程序将有如下的输出======

entering
call demofun 0 1
exiting

3.Decorator with arguments

如果你想在trace的信息中加入一些其它的信息,比如说作者,日期什么的这时候可以按下面的代码提供这些信息

def traced(author_name):
def dec(func):
func._author_name = author_name
def wrapper(*__args,**__kw):
print ‘entering’,func,__args,func.__dict__
try:
return func(*__args,**__kw)
finally:
print ‘exiting’,func
return wrapper
return dec

--结束END--

本文标题: Embedded Python应用小结

本文链接: https://www.lsjlt.com/news/192739.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Embedded Python应用小结
    http://www.bloggogo.com/cat=7 Embedded Python应用小结 Thursday, January 24th, 2008 很久以前就想写一篇这方面的笔记,这次做一个客户端验的模块,服务器端是用C#写的...
    99+
    2023-01-31
    小结 Embedded Python
  • Python中元组的概念及应用小结
    目录1.元组的概念2.元组的基本使用2.1.定义一个元组2.2.定义一个空元组2.3.元组的元素是不可变的2.4.当元组中的元素是一个列表时列表中的元素可变2.5.当元组中只定义一个...
    99+
    2023-01-31
    Python中元组概念 Python中元组基本应用 Python元组
  • 浅谈Python数据处理csv的应用小结
    目录题目代码运行实例题目 文件scores.csv包含十位学生的成绩单,表头是"姓名 语文 数学 英语"。请编程完成下述功能。1)计算每位学生的总分与排名,并将扩...
    99+
    2024-04-02
  • python中f‘{}‘用法小结
    python中f‘{}‘用法 #先定义一个类class Desk():def desk(self):print(‘能放东西’)prin...
    99+
    2023-03-01
    python中f‘{}‘用法 python中f用法
  • Python group()小结
    今天看到group()方法,有点疑惑,自己动手了解了一下。 举例如下: import re a = "123abc456" print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0) ...
    99+
    2023-01-31
    小结 Python group
  • python调用shell命令小结
     在写python脚本的时候,经常需要调用系统命令,常用的python调用系统命令的方法主要有subprocess.call和os.popen。默认情况下subprocess.call的方法结果是返回值,即1或0,而os.popen则是命令...
    99+
    2023-01-31
    小结 命令 python
  • Jenkins 脚本命令行应用小结
    Jenkins脚本命令行应用总结 测试环境 Jenkins 2.304 脚本命令行入口 Jenkins主页→系统管理→脚本命令行 遍历项目 例子:获取所有自由风格...
    99+
    2024-04-02
  • Python-函数小结
    原文出处,如有侵权,请联系删除。 用户自定义.py文件    如果你已经把my_abs()的函数定义保存为abstest.py文件了,那么,可以在该文件的当前目录下启动Python解释器,用from abstest import my...
    99+
    2023-01-31
    小结 函数 Python
  • Python使用struct库的用法小结
    目录struct简介常用函数struct.pack(format:str, v1, v2, …)struct.unpack(format:str,buffer:byte...
    99+
    2024-04-02
  • python中itertools模块使用小结
    Python 内置的 itertools 模块包含了一系列用来产生不同类型迭代器的函数或类,这些函数的返回都是一个迭代器,我们可以通过 for 循环来遍历取值,也可以使用 next(...
    99+
    2024-04-02
  • python操作sqlite3小结
    使用默认模块sqlite3 使用sqlite3模块的connect方法来创建/打开数据库,需要指定数据库路径,不存在则创建一个新的数据库 导入模块 import sqlite3 建立连接 con = sqlite3.connec...
    99+
    2023-01-31
    小结 操作 python
  • python常用小脚本实例总结
    目录前言打印16进制字符串文件合并多线程下载图集多线程下载图片爬虫抓取信息爬虫多线程下载电影名称串口转tcp工具远程读卡器server端黑客rtcp反向链接调用c的动态库示例tcp的...
    99+
    2024-04-02
  • Python json模块常用方法小结
    目录jons.loads()json.dump()json.load()json.dumps()JSON方法总结JSON(JavaScript Object Notation)是一种...
    99+
    2023-03-22
    Python json模块常用方法 Python json模块
  • Python的@装饰器的作用小结
    我们在编程过程中,常常会遇到这种需求: 比如,我想开发一款计算器,我已经写好了一堆函数,用于执行各种计算,那么我们需要在执行各种计算函数前,首先对输入的数据进行检查,确保他们必须得是...
    99+
    2024-04-02
  • Mybatis基础概念与高级应用小结
    目录Mybatis基础回顾与高级应用引入依赖jdbc.propertiessqlMapConfig.xml案例一-查询用户案例二-添加用户案例三-编辑用户案例四-删除用户传统开发方式...
    99+
    2024-04-02
  • Python大小写如何应用
    这篇文章给大家分享的是有关Python大小写如何应用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。转换Python大小写和其他语言一样,Python为string对象提供了转换大小写的方法:upper() 和 l...
    99+
    2023-06-17
  • Angular中ng-template和ng-container的应用小结
    目录ng-template作用域的TemplateTemplateRefng-container动态创建ComponentAngular的日常工作中经常会使用到ng-template...
    99+
    2024-04-02
  • C++实现结束应用进程小工具
    C++实现结束应用进程小工具(windows) 说明: 在电脑上一些软件或系统有时可能会将程序偷偷运行在后台,占用计算机资源的情况。一般我们通过可以找到程序文件所在位置,禁止程序启动...
    99+
    2024-04-02
  • python小结之Ellipsis对象
    Ellipsis对象。 写作 : ‘…’ 中文解释:省略 该对象bool测试是为真 用途: 1.用来省略代码,作用类似于pass的一种替代方案,这是python的’TBD’(未确定内容)。 def fun(): … 2....
    99+
    2023-01-31
    小结 对象 python
  • Python操作小结(mysql、txt
            有段时间没有使用python了,对它的语法有点生疏,花了几个小时熟悉,期间发现很多小细节不清楚。为了下次能快速上手,避免重复犯错,我将python使用过程中的一些问题在这篇博文中记录小结一下,主要内容涉及到python操作m...
    99+
    2023-01-31
    小结 操作 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作