WEB开发网
开发学院软件开发Python 用 Python 编写插件 阅读

用 Python 编写插件

 2010-09-22 11:14:14 来源:WEB开发网   
核心提示: 我使用 touch foo{0..10}.txt 创建了十一个临时文件,现在这个命令行工具使用它找到的一个插件显示完整路径、文件名和扩展名(以 “|” 字符分隔),用 Python 编写插件(4), 简单的插件体系结构到目前为止,我只讨论了如何使用这个工具,我们要讨

我使用 touch foo{0..10}.txt 创建了十一个临时文件,现在这个命令行工具使用它找到的一个插件显示完整路径、文件名和扩展名(以 “|” 字符分隔)。

简单的插件体系结构

到目前为止,我只讨论了如何使用这个工具,还没有解释这些插件的工作原理。先看看这个模块顶部的导入语句:

  plugin_available = True
  from plugin import *
  from plugin import __all__ #note this is the registered plugin list
except ImportError:
  plugin_available = False

这个导入语句揭示了这个极其简单的插件体系结构的秘密。一般情况下,Python 官方文档不鼓励使用 “from package import *” 语法,但是如果有合理理由的话(比如编写插件),可以这样做。插件作者负责在插件目录中的 __init__.py 文件中创建一个条目。这个条目应该像下面这样:

"""Lists all of the importable plugins"""
__all__ = ["move_to_tmp", "print_file_path_ext"]  

通过创建这个条目,可以以 * 的形式导入包(或目录)中的所有模块。接下来,导入实际的 __all__ 列表,向用户显示可用的插件。最后,还需要一行代码。因为直到运行之前命令行工具并不知道要使用哪个插件动作,所以要使用 eval 把命令行上的动作字符串转换为一个可调用的函数,如下所示:

action_plugin = eval(arguments[1])

在一般情况下,应该极其谨慎地使用 eval,但是在这里通过 eval 告诉工具使用哪些插件方法是合理的。

插件示例分析

既然已经了解了这个插件体系结构的工作原理,就来看看实际的插件。注意,为了让这个体系结构发挥作用,需要在当前工作目录或 Python site-packages 目录中创建一个插件目录。我们要讨论的插件称为 print_file_path_ext.py,它包含一个称为 plug-in 的方法。这是插件开发人员必须满足的 API 要求。

上一页  1 2 3 4 5  下一页

Tags:Python 编写 插件

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接