【发布时间】:2012-12-15 23:56:41
【问题描述】:
我一直在读这个:
http://lkubuntu.wordpress.com/2012/10/02/writing-a-python-plugin-api/
我正在尝试做一些类似 Minecraft 帮助系统的事情。
假设我有我的主模块,帮助命令是:
帮助
测试1
测试2
然后,在加载插件后,我将拥有相同的集合,以及插件可用的集合。
另外,在处理命令时,我该怎么做才能区分来自内部程序的命令和来自插件的命令?!
到目前为止,我想出了这个:
import imp
import os
PluginFolder = "./plugins"
MainModule = "__init__"
def getPlugins():
plugins = []
possibleplugins = os.listdir(PluginFolder)
for i in possibleplugins:
location = os.path.join(PluginFolder,i)
if not os.path.isdir(location) or not MainModule + ".py" in os.listdir(location):
continue
info = imp.find_module(MainModule, [location])
plugins.append({"name":i, "info": info})
return plugins
def loadPlugin(plugin):
return imp.load_module(MainModule, *plugin["info"])
disponiveis = []
for i in getPlugins():
print("Loading plugin "+ i["name"])
plugin = loadPlugin(i)
plugin.run()
disponiveis.append(i["name"])
while 1:
foo = raw_input(":")
if foo == 'quit':
break;
elif foo in disponiveis:
print "ok"
else:
continue
与原始示例相比不多:|
我的大问题是加载所有插件的循环。
目前我有 2 个插件,hello 和 testing。我该怎么做才能拥有这样的东西:
send_command(plugin_name, action)
另外,if/elif 有点蹩脚...可用的命令应该来自插件。
使用 dict 也许?!?!然后在加载插件时,它会将附加命令添加到该 dict ?!?!
【问题讨论】:
-
你的插件的结构是什么?它是一个类,方法,你传递了什么给它吗?