私はこれを読んでいます:
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
元の例からそれほど多くはありません:|
私の大きな問題は、すべてのプラグインをロードするサイクルです。現在、 helloとtesting
の 2 つのプラグインがあります。このようなものを得るにはどうすればよいですか:
send_command(plugin_name, action)
また、if/elif はちょっと不自由です... 利用可能なコマンドはプラグインから取得する必要があります。多分dict
を使用していますか?!?! そして、プラグインをロードすると、追加のコマンドがその辞書に追加されます?!?!