Electronic Joint Business

Solution for E-Business

让Python成为嵌入式语言

文章评价: C 和 C++ 这两种强大的语言可以创建高性能本地编译代码,其缺点也比较明显,即运行时的灵活性差。一旦 C/C++ 应用编译完成,代码基本是静态的,有时这会成为大问题。例如,如果想要通过创建插件来扩展应用的功能,就不得不处理复杂的动态链接问题,这一个大麻烦。而且还要求用户必须对 C/C++ 有所了解,这大大限制了编写应用扩展的人群。 更好的方法是用某种脚本语言来扩展应用。使用脚本语言,你可以获得更多运行时的灵活性,同时缩短开发时间,降低开发扩展的学习曲线。不幸的是,创建一种脚本语言是个艰巨的任何甚至本身就可能成为一个大问题。不过,我们可以利用现成的脚本语言。比如 Python,你可以将解释器直接嵌入在应用中,无需在应用中添加太多代码就能获得 Python 的强大功能和灵活性。 在应用中使用Python 在程序包含 Python 解释器是相当简单的。Ptyhon 提供了单一的头文件Python.h,包括了在应用中嵌入解释器的所有定义。其中包含很多内容,包括一些标准头文件。为了高效地编译,如果仅包括你用到的那部分接口固然不错,不过 Python 并未提供这个选项。如果你看过Python.h,你可以看到它定义了多个重要的宏,包括相当数量的公用头文件,这些都是文件后续的独立组件所需要的。 要将应用和 Python 解释器链接在一起,你需要运行python-config程序来获得链接选项,并将之传递给编译器。在我的系统上,参数是 -lpython27 -lm -L/usr/local/python27/libs 一个非常简单的嵌入应用 在C语言应用需要加多少代码才能运行Python解释器呢?正如您所件,非常少。实际上,如示例1所示,只需要简单的说三行代码即可:一行初始化解释器,一行将代码传递给解释器执行,最后一行关闭解释器。 void exec_pycode(const char* code) {   Py_Initialize();   PyRun_SimpleString(code);   Py_Finalize(); } 你也可以象示例2一样,在程序中调用Py_Main()函数,这会呼叫出解释器窗口,就像平时我们直接从命令行运行Python一样。当用户退出解释器shell时,控制权才会返回给应用。 void exec_interactive_interpreter(int arg, char** argv) {   Py_Initialize();   Py_Main(argc, argv);   Py_Finalize(); } […]

,

One thought on “让Python成为嵌入式语言
  • […] 在另一篇文章中,我们已经介绍了如何在C应用中嵌入Python语言,通过这项技术,可以让应用的高级用户来修改或定制化他们的程序,你也可以利用Python的语言能力而不是自己去实现它。Python是嵌入语言的一个不错的的选择,因为它提供了干净直观的C语言API。关于如何在C应用中嵌入Python解释器,你可以参考:让Python成为嵌入式语言一文。鉴于许多复杂的应用都会利用多线程技术,本文将着重介绍如何创建线程安全的界面来调用Python解释器。 […]

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.