私たちのアプリケーションはコマンドを受け取り、プラグインがそれを処理することを期待してプラグインに配布します
トリッキーな計画
- 開始時に、プラグインでフォルダーをスキャンします
- 見つかったすべてのファイルをインポートする
- コマンドを受信すると、各プラグインに送信します
main.py
例の「外部」部分のコードのみが含まれており、コメントする必要がないことを望みます。
Copy Source | Copy HTML import plugin plugin.LoadPlugins() s = '' while (s != 'exit' ): print '>' , s = raw_input () a = s.split( ' ' ) for p in plugin.Plugins: p.OnCommand(a[ 0 ], a[ 1 :])
Copy Source | Copy HTML import plugin plugin.LoadPlugins() s = '' while (s != 'exit' ): print '>' , s = raw_input () a = s.split( ' ' ) for p in plugin.Plugins: p.OnCommand(a[ 0 ], a[ 1 :])
Copy Source | Copy HTML import plugin plugin.LoadPlugins() s = '' while (s != 'exit' ): print '>' , s = raw_input () a = s.split( ' ' ) for p in plugin.Plugins: p.OnCommand(a[ 0 ], a[ 1 :])
Copy Source | Copy HTML import plugin plugin.LoadPlugins() s = '' while (s != 'exit' ): print '>' , s = raw_input () a = s.split( ' ' ) for p in plugin.Plugins: p.OnCommand(a[ 0 ], a[ 1 :])
Copy Source | Copy HTML import plugin plugin.LoadPlugins() s = '' while (s != 'exit' ): print '>' , s = raw_input () a = s.split( ' ' ) for p in plugin.Plugins: p.OnCommand(a[ 0 ], a[ 1 :])
Copy Source | Copy HTML import plugin plugin.LoadPlugins() s = '' while (s != 'exit' ): print '>' , s = raw_input () a = s.split( ' ' ) for p in plugin.Plugins: p.OnCommand(a[ 0 ], a[ 1 :])
Copy Source | Copy HTML import plugin plugin.LoadPlugins() s = '' while (s != 'exit' ): print '>' , s = raw_input () a = s.split( ' ' ) for p in plugin.Plugins: p.OnCommand(a[ 0 ], a[ 1 :])
Copy Source | Copy HTML import plugin plugin.LoadPlugins() s = '' while (s != 'exit' ): print '>' , s = raw_input () a = s.split( ' ' ) for p in plugin.Plugins: p.OnCommand(a[ 0 ], a[ 1 :])
Copy Source | Copy HTML import plugin plugin.LoadPlugins() s = '' while (s != 'exit' ): print '>' , s = raw_input () a = s.split( ' ' ) for p in plugin.Plugins: p.OnCommand(a[ 0 ], a[ 1 :])
Copy Source | Copy HTML import plugin plugin.LoadPlugins() s = '' while (s != 'exit' ): print '>' , s = raw_input () a = s.split( ' ' ) for p in plugin.Plugins: p.OnCommand(a[ 0 ], a[ 1 :])
plugin.pyで取り出すプラグインに関連するすべてのコード
plugin.py
Copy Source | Copy HTML
- 輸入 OS
- インポートシステム
- #ダウンロードしたプラグインのインスタンス
- プラグイン= []
- #プラグインの基本クラス
- クラス プラグイン (オブジェクト):
- 名前= 'undefined'
- #フィードバック方法
- def OnLoad (自己):
- 合格する
- def OnCommand (self、cmd、args):
- 合格する
- def LoadPlugins ():
- ss = os .listdir( 'plugins' ) #/ plugins内のプラグインのリストを取得
- sys .path.insert( 0 、 'plugins' ) #プラグインフォルダーを$ PATHに追加して、__ import__がそれらをロードできるようにする
- ssの場合:
- 'Found plugin'を 印刷し ます 、s
- __import__ ( os .path.splitext(s)[ 0 ]、None、None、[ '' ]) #プラグインソースをインポート
- プラグインのプラグイン .__サブクラス__(): #プラグインはオブジェクトから派生するため、 __ subclasses__ を使用して、このクラスから生成されたすべてのプラグインを検索します
- p = plugin() #インスタンスを作成する
- Plugins.append(p)
- p。 OnLoad () #このプラグインのロードイベントを呼び出す
- 帰る
plugins / foo.py-プラグインの例
Copy Source | Copy HTML
- プラグインインポートプラグインから
- class HelloPlugin (Plugin): #親クラスからプラグインを生成します
- 名前= 'HelloPlugin v 1.0 Extreme Edition'
- #必要なメソッドを置き換える
- def OnLoad (自己):
- 「HelloPlugin 1.0 Extreme VIP Edition Loaded!」の 印刷
- def OnCommand (self、cmd、args):
- if (cmd == 'hello' and len (args)> 0 ):
- 'It \' s ' 、引数[ 0 ]、 '!\ nJeez、男、はじめまして!
- 真を返す
- その他 :
- 偽を返す
これで例を実行できます。
$ python main.py
プラグインfoo.pyが見つかりました
HelloPlugin 1.0 Extreme VIP Editionがロードされました!
> hello%username%
%username%です!
うわぁ、はじめまして!
>
plugins / shell.py-より複雑なプラグイン
コマンドをシェルにブロードキャストして出力を返すプラグインを作成しましょう。
Copy Source | Copy HTML
- プラグインインポートプラグインから
- インポートコマンド
- クラス ShellPlugin (プラグイン):
- 名前= 「シェルプラグイン」
- def OnLoad (自己):
- 「シェルプラグインがロードされました。」
- def OnCommand (self、cmd、args):
- if (cmd == 'run' ):
- 印刷 コマンド .getoutput( "" .join(args))
- 真を返す
- その他 :
- 偽を返す
$ python main.py
プラグインshell.pyが見つかりました
プラグインfoo.pyが見つかりました
シェルプラグインがロードされました。
HelloPlugin 1.0 Extreme VIP Editionがロードされました!
> uname -rを実行します
2.6.31-14-generic
>終了
以上です!
ソースコードをダウンロードする