怎么用vs写c语言Python自动化来写c语言?

他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)【兄弟连学Python】Python是什么?
】 浏览:21次
Python是一种面向对象的解释性计算机程序设计语言由荷兰人Guido von Rossum于1989年的圣诞节发明第一个公开发行版发行与1991年
Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言
Python语言特色<span style="font-size: 18 color: #.Python是一门解释性语言解释性语言:在系统中运行时需要使用解释器(如:PHP、Java 等)编译性语言:在系统中运行不需要解释器,可以直接运行(如:C、 等)<span style="font-size: 18 color: #.弱类型语言简单来说,弱类型语言可以不用提前声明变量的类型即可直接使用而强类型语言则必须要提前声明变量的类型,否则这个变量不能使用<span style="font-size: 18 color: #.面向对象的语言Python语言支持完全的面向对象方式,同时也支持过程化和一定程度的函数式可以简单的理解为,在Python中,一切皆对象<span style="font-size: 18 color: #.胶水语言Python能够把其他语言(尤其是 C 和
)编写的各种模块很轻松的联合在一起另外Python语言本身和扩展库大部分都由 C 语言构建
应用领域Python的应用领域非常广:&&& 如:Web应用开发,自动化运维,网络爬虫,大数据分析,图像处理,科学计算,游戏,桌面软件,人工智能等等目前业内几乎所有大中型互联网企业都在使用Python&&& 如:Youtube、豆瓣、知乎、Google、Yahoo!、Facebook、百度、腾讯、美团等&&& 最新的TIOBE排行榜,Python赶超PHP占据第五。尤其是在 AI 和 大数据 时代,Python是 AI 和 大数据 时代的第一开发语言。这已经是一个不争的事实了,唯一的悬念就是谁能坐上第二把交椅了。Python的优势<span style="font-size: 18 color: #.简单Python是一种代表简单主义思想的语言阅读一个良好的Python程序就像是在读英语,使你能够专注于解决问题而不是去搞明白语言本身<span style="font-size: 18 color: #.易学Python极其容易上手,因为Python有极其简单的说明文档<span style="font-size: 18 color: #.速度快因为Python崇尚优美、清晰、简单,所以实现相同功能,使用的代码量要比其他绝大多数语言简洁的多而且因为底层是 C 语言写的,很多标准库和第三方库也都是用 C 语言写的,所以运行速度也是非常快(相对)<span style="font-size: 18 color: #.免费、开源Python是FLOSS(自由/开放源码软件)之一。FLOSS是基于一个团体分享知识的概念使用者可以自由的发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中<span style="font-size: 18 color: #.高层语言用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存等底层细节<span style="font-size: 18 color: #.可移植性由于它的开源本质,Python已经被移植在许多平台上(经过改动它能够工作在不同平台上)<span style="font-size: 18 color: #.可扩展性如果希望关键代码运行的更快或某些算法不公开,可以部分程序使用C或C++编写,然后在Python程序中使用它们<span style="font-size: 18 color: #.可嵌入性可以把Python嵌入到 C 或 C++ 程序中,从而向程序用户提供脚本功能
【】【】【】
【】【】【】
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_76
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_80
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_76
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_08
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_06
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_07
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_78
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_72
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_84
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_41
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_9
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_9
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_9
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_9
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_3
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_3
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_3
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_3
<div style="font-size:13text-align:height:14padding:0font-weight:"
id="DiggNum_32012年9月 Windows专区大版内专家分月排行榜第一2012年9月 C/C++大版内专家分月排行榜第一2012年8月 Windows专区大版内专家分月排行榜第一
2012年9月 其他开发语言大版内专家分月排行榜第二2012年8月 VC/MFC大版内专家分月排行榜第二2012年8月 其他开发语言大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。15.6 从C语言中调用Python代码_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
15.6 从C语言中调用Python代码
W3Cschool(www.w3cschool.cn)最大的技术知...|
总评分0.0|
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩2页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢自动化测试中python与C/C++的混合使用
项目的自动化测试中已经使用了基于Python脚本的框架,自动化过程中最关键的问题就是如何实现桩模块。运用Python强大的功能,实现任何桩模块都是可能的,但是是否必须完全使用Python实现模块逻辑,成本是一个决定性因素。在桩模块逻辑简单的情况下,使用Python模拟模块逻辑不但使自动化测试的结构清晰,也具有更好的灵活性,但是如果桩模块逻辑复杂,实现起来可能要耗费很大的成本,也容易由于桩模块逻辑与实际不符导致测试结果不可信。在这种情况下,如果能够借用RD开发的某些代码段/库,将会对测试自动化带来很多效益。
另外,在Python中调用C/C++代码的方法也可能应用于C/C++库的测试中,这种测试方法的可行性还有待研究。
以下总结出几种在Python中调用C/C++代码的方法
使用ctypes模块调用C动态库
从Python2.5开始,Python开始提供ctypes模块来提供对C语言编译的动态库文件的调用。注意, 这里特指C的动态库
,用C++编译的动态库ctypes虽然能够加载,但调用时的函数名已经由于C++的重载特性被加以修改,难以调用。
使用ctypes调用C动态库的好处在于不用进行额外的开发,可以直接使用编译好的动态库。ctypes提供了完整的C类型封装,也支持自定义类型,大大减少在调用过程中的工作量。ctypes的使用很简单,只需熟悉python封装与C中的对应关系即可。以下用一个简单的例子来说明:
from ctypes import * #导入ctypes模块
libc = cdll.LoadLibrary("libc.so.6") #加载libc动态库
str = c_char_p('Hello World!') #使用char
*在ctypes中的对应封装c_char_p,相当于char* str=”Hello World!”
libc.printf(“yell: %s\n”, str) #调用printf函数
ctypes的功能当然远不止这些,有兴趣的同学可以参考这里
使用Python的扩展(Extending)机制
ctypes很方便地可以调用C的动态库,但是对C++编译的动态库,调用起来很困难。这种情况利用Python的Extending机制就可以解决。Python提供了一套完整的框架来使用C/C++编写扩展库,可以很灵活的开发C++扩展模块。这种方法的缺点是工作量比较大,需要为每一个方法编写接口,这里不做详细介绍,可以参考:
那么有什么办法可以高效的调用C++动态库呢,答案是SWIG。
使用SWIG生成扩展模块
上面提到了Python的扩展机制,缺点是工作量比较大,这里介绍一个工具SWIG。SWIG是一种简化脚本语言与C/C++接口的开发工具,通过包装和编译C语言程序来达到与脚本语言通讯目的的工具。它正是基于Python的扩展机制,自动生成接口文件,再编译成可以被Python调用的动态库扩展模块。
使用SWIG生成扩展模块分为以下几步:
将需要调用的代码编译成目标文件(.o)
用SWIG读取编写描述文件(.i),生成接口文件(.cxx);
将接口文件编译为目标文件(.o)
将接口文件的目标文件和原代码段的目标文件一起编译成动态库
以下举例说明:
假设有如下文件
swig_ex.cpp 需要转换成扩展库的原始代码,包含一个int fact(int)函数
swig_ex.h 原始代码的头文件
swig_ex.i SWIG描述文件
swig_ex.i是一个描述文件,有SWIG自己的语法,比较简单,内容如下:
%module swig_ex
#define SWIG_FILE_WITH_INIT
#include "swig_ex.h"
int fact(int n);
再写一个Makefile来把这些文件编译成动态库:
all: swig_ex.o swig_ex_wrap.o _swig_ex.so
swig_ex.o: swig_ex.cpp swig_ex.h #编译源文件
g++ -fPIC -c swig_ex.cpp
swig_ex_wrap.o: swig_ex.i swig_ex.o
#根据SWIG描述文件(.i)生成接口文件(.cxx),再编译之
swig -c++ -python swig_ex.i
g++ -O2 -fPIC -c swig_ex_wrap.cxx
-I/home/work/linyi/autoframe/tool/python/include/python2.6/
_swig_ex.so: swig_ex_wrap.o #将目标文件打包成动态库
g++ -shared swig_ex.o swig_ex_wrap.o -o _swig_ex.so
.PHONY: clean
rm -rf swig_ex_wrap.* swig_ex.py _swig_ex.so
编译好以后会有一个so和py文件,写一个setup.py把他们安装到python目录就可以和其他模块一样被python调用了:
Import swig_ex
swig_ex.fact(10)
参考文档地址:
原始但有效的方法
除了上面这些方法,在Python中借用C/C++代码最原始有效的方法就是将代码编译成可执行程序,从Python里用Popen方法来调用获取输出。这种方法简单有效,缺点是不够灵活,有比较大的局限性,不过在很多情况下也已经足够了。
pipe = os.popen('./tool &a %s &b %s' % (“hello”, “world”))
re = pipe.read()
以上这些方法基本上已经能满足Python调用C/C++的需求了,此外还有一些方法,例如使用Boost.Python,使用Pyrex,这些方法都能提供Python与C/C++的交互。
在Python中引用C/C++模块的方法较多,根据需要从中选择恰当的方法可以减少很多工作量。
在Python中引用C/C++模块弥补了Python脚本测试框架的很多不足,在提高代码复用率的同时,模块的性能也大大提高。
作者:qabloger 本文为转载
原创作品,允许转载,转载时请务必以超链接形式标明文章
、作者信息和本声明。否则将追究法律责任。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 c语言自动化测试 的文章

 

随机推荐