跨语言相互调用,一直是不同编程语言间代码交互Interop的难题,微软一直致力于给C++与C#找个理想的”翻译“,这么多年在语法语义(当然还应该包含编译器)和ABI(应用二进制接口)层面做了不少尝试,进而产生了C++\CLI,C++\CX和COM等技术产物,但这些产物如同现实中自然语言翻译一样,并不算太完美(java同其他语言交互的机制不太了解)。在这点上Python似乎把问题解决的很好,这也就是为什么Python会叫做胶水语言。正是由于python的这一特性,所以它被广泛用于自动化测试中。
python与其他语言交互:
1.使用ctypes 模块调用 C 动态库:如果被测试模块是以C语言编写,可以用Ctypes调用动态链接库,好处在于不用进行额外的开发,可以直接使用编译好的动态库。 ctypes 提供了完整的 C 类型封装,也支持自定义类型,大大减少在调用过程中的工作量。但C++的改名机制使得python调用C++编译的动态链接库很麻烦。
2.使用原生态的Python 的扩展和嵌入( Extending &Embedding)机制:Python 提供了一套完整的Extending框架来使用 C/C++ 编写扩展库,可以很灵活的开发 C/C++ 扩展模块。这种方法的缺点是工作量比较大,需要为每一个方法编写接口(但通过 SWIG可以降低工作量高效的调用动态链接库)。通过Embedding机制则可以使用C/C++调用python代码进行交互。
(Note:SWIG 是一种简化脚本语言与 C/C++ 接口的开发工具,通过包装和编译 C 语言程序来达到与脚本语言通讯目的的工具。它正是基于 Pyth